修改1
This commit is contained in:
parent
588ae8ebdc
commit
71f682d99a
@ -17,7 +17,7 @@ func (r *Menu) GetMenuList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
if len(MenuList) == 0 {
|
||||
if MenuList == nil {
|
||||
responses.FailWithMessage("请联系管理人员设置菜单", c)
|
||||
return
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ func (r *Role) GetRoleList(c *gin.Context) {
|
||||
|
||||
AdminRoleDao := dao.AdminRoleDao{}
|
||||
adminRole, err := AdminRoleDao.GetAdminRolePageSearch(RoleRequest.GetRoleList.RoleName, RoleRequest.GetRoleList.Page, RoleRequest.GetRoleList.PageSize)
|
||||
if err != nil || len(adminRole) == 0 {
|
||||
if err != nil || adminRole == nil {
|
||||
responses.Ok(c)
|
||||
c.Abort()
|
||||
return
|
||||
@ -116,17 +116,29 @@ func (r *Role) PutRoleStatus(c *gin.Context) {
|
||||
|
||||
// AddRole 新增角色
|
||||
func (r *Role) AddRole(c *gin.Context) {
|
||||
// if err := c.ShouldBind(&RoleRequest.PutRoleStatus); err != nil {
|
||||
// responses.FailWithMessage(err.Error(), c)
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// // 参数验证
|
||||
// if err := global.Validate.Struct(RoleRequest.PutRoleStatus); err != nil {
|
||||
// responses.FailWithMessage(utils.Translate(err), c)
|
||||
// return
|
||||
// }
|
||||
if err := c.ShouldBindJSON(&RoleRequest.AddRole); err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 参数验证
|
||||
if err := global.Validate.Struct(RoleRequest.AddRole); err != nil {
|
||||
responses.FailWithMessage(utils.Translate(err), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 判断菜单数据是否为空
|
||||
if len(RoleRequest.AddRole.MenuIds) == 0 {
|
||||
responses.FailWithMessage("请为角色添加菜单", c)
|
||||
return
|
||||
}
|
||||
|
||||
RoleService := service.RoleService{}
|
||||
_, err := RoleService.AddRole(c, RoleRequest.AddRole)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
responses.Ok(c)
|
||||
}
|
||||
|
||||
|
||||
@ -8,6 +8,7 @@ import (
|
||||
type AdminMenuDao struct {
|
||||
}
|
||||
|
||||
// GetAdminMenuList 获取菜单列表
|
||||
func (r *AdminMenuDao) GetAdminMenuList() (m []*model.AdminMenu, err error) {
|
||||
err = global.Db.Find(&m).Error
|
||||
if err != nil {
|
||||
@ -16,6 +17,7 @@ func (r *AdminMenuDao) GetAdminMenuList() (m []*model.AdminMenu, err error) {
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetAdminMenuListSortOrderNum 获取菜单列表-排序
|
||||
func (r *AdminMenuDao) GetAdminMenuListSortOrderNum() (m []*model.AdminMenu, err error) {
|
||||
err = global.Db.Order("order_num asc").Find(&m).Error
|
||||
if err != nil {
|
||||
@ -23,3 +25,12 @@ func (r *AdminMenuDao) GetAdminMenuListSortOrderNum() (m []*model.AdminMenu, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetAdminMenuById 获取菜单数据-菜单id
|
||||
func (r *AdminMenuDao) GetAdminMenuById(menuId int64) (m *model.AdminMenu, err error) {
|
||||
err = global.Db.First(&m, menuId).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
"hospital-admin-api/api/model"
|
||||
"hospital-admin-api/global"
|
||||
)
|
||||
@ -10,28 +11,28 @@ type AdminRoleDao struct {
|
||||
|
||||
// GetAdminRoleFirstById 角色id获取用户角色
|
||||
// roleId 角色id
|
||||
func (r *AdminRoleDao) GetAdminRoleFirstById(roleId int64) (m model.AdminRole, err error) {
|
||||
func (r *AdminRoleDao) GetAdminRoleFirstById(roleId int64) (m *model.AdminRole, err error) {
|
||||
err = global.Db.First(&m, roleId).Error
|
||||
if err != nil {
|
||||
return m, err
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetAdminRolePageSearch 搜索角色列表-分页
|
||||
func (r *AdminRoleDao) GetAdminRolePageSearch(roleName string, page, pageSize int) (m []model.AdminRole, err error) {
|
||||
func (r *AdminRoleDao) GetAdminRolePageSearch(roleName string, page, pageSize int) (m []*model.AdminRole, err error) {
|
||||
// 计算偏移量
|
||||
offset := (page - 1) * pageSize
|
||||
|
||||
if roleName != "" {
|
||||
err = global.Db.Where("role_name = ?", roleName).Offset(offset).Limit(pageSize).Find(&m).Error
|
||||
if err != nil {
|
||||
return m, err
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
err = global.Db.Offset(offset).Limit(pageSize).Find(&m).Error
|
||||
if err != nil {
|
||||
return m, err
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return m, nil
|
||||
@ -45,3 +46,11 @@ func (r *AdminRoleDao) EditAdminRoleStatusById(roleId int64, roleStatus int) err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddAdminRole 新增角色
|
||||
func (r *AdminRoleDao) AddAdminRole(tx *gorm.DB, model *model.AdminRole) (*model.AdminRole, error) {
|
||||
if err := tx.Create(model).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return model, nil
|
||||
}
|
||||
|
||||
@ -10,19 +10,19 @@ type AdminUserDao struct {
|
||||
|
||||
// GetAdminUserFirstById 获取用户数据-用户id
|
||||
// roleId 用户id
|
||||
func (r *AdminUserDao) GetAdminUserFirstById(userId int64) (m model.AdminUser, err error) {
|
||||
func (r *AdminUserDao) GetAdminUserFirstById(userId int64) (m *model.AdminUser, err error) {
|
||||
err = global.Db.First(&m, userId).Error
|
||||
if err != nil {
|
||||
return m, err
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetAdminUserFirstByAccess 获取用户数据-用户账号
|
||||
func (r *AdminUserDao) GetAdminUserFirstByAccess(username string) (m model.AdminUser, err error) {
|
||||
func (r *AdminUserDao) GetAdminUserFirstByAccess(username string) (m *model.AdminUser, err error) {
|
||||
err = global.Db.Where("access = ?", username).First(&m).Error
|
||||
if err != nil {
|
||||
return m, err
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
@ -32,7 +32,7 @@ func Auth() gin.HandlerFunc {
|
||||
// 获取用户数据
|
||||
AdminUserDao := dao.AdminUserDao{}
|
||||
adminUser, err := AdminUserDao.GetAdminUserFirstById(userId)
|
||||
if err != nil || adminUser.UserID == 0 {
|
||||
if err != nil || adminUser == nil {
|
||||
responses.FailWithMessage("用户数据错误", c)
|
||||
c.Abort()
|
||||
return
|
||||
@ -53,7 +53,7 @@ func Auth() gin.HandlerFunc {
|
||||
// 获取角色数据
|
||||
AdminRoleDao := dao.AdminRoleDao{}
|
||||
adminRole, err := AdminRoleDao.GetAdminRoleFirstById(roleId)
|
||||
if err != nil || adminRole.RoleId == 0 {
|
||||
if err != nil || adminRole == nil {
|
||||
responses.FailWithMessage("用户数据错误", c)
|
||||
c.Abort()
|
||||
return
|
||||
|
||||
@ -2,8 +2,8 @@ package model
|
||||
|
||||
// AdminMenuApi 后台-菜单-接口表
|
||||
type AdminMenuApi struct {
|
||||
MenuId int64 `gorm:"column:menu_id;type:bigint(19);primary_key;comment:菜单id" json:"menu_id"`
|
||||
ApiId int64 `gorm:"column:api_id;type:bigint(19);primary_key;comment:接口id" json:"api_id"`
|
||||
MenuId int64 `gorm:"column:menu_id;type:bigint(19);comment:菜单id" json:"menu_id"`
|
||||
ApiId int64 `gorm:"column:api_id;type:bigint(19);comment:接口id" json:"api_id"`
|
||||
Menu AdminMenu `gorm:"foreignkey:MenuId;association_foreignkey:MenuID"`
|
||||
API AdminAPI `gorm:"foreignkey:ApiId;association_foreignkey:APIID"`
|
||||
}
|
||||
|
||||
@ -12,3 +12,15 @@ type AdminRole struct {
|
||||
func (m *AdminRole) TableName() string {
|
||||
return "gdxz_admin_role"
|
||||
}
|
||||
|
||||
// func (a *AdminRole) BeforeCreate(tx *gorm.DB) (err error) {
|
||||
// node, err := snowflake.NewNode(config.C.Snowflake)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// tx.Statement.SetColumn("RoleId", node.Generate().Int64())
|
||||
//
|
||||
// a.Model.CreatedAt = LocalTime(time.Now())
|
||||
// tx.Statement.SetColumn("CreatedAt", a.Model.CreatedAt)
|
||||
// return
|
||||
// }
|
||||
|
||||
@ -5,7 +5,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"gorm.io/gorm"
|
||||
"reflect"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
@ -59,26 +58,26 @@ func (t *LocalTime) String() string {
|
||||
}
|
||||
|
||||
// BeforeCreate 注册 BeforeCreate 回调函数
|
||||
func (m *Model) BeforeCreate(tx *gorm.DB) (err error) {
|
||||
// 动态访问 YourModel 结构体本身
|
||||
model := tx.Statement.Dest
|
||||
|
||||
// 设置创建时间
|
||||
layout := "2006-01-02 15:04:05"
|
||||
strTime := "2019-08-09 11:35:52"
|
||||
parsedTime, err := time.Parse(layout, strTime)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 使用反射设置创建时间字段
|
||||
createdAtField := reflect.ValueOf(model).Elem().FieldByName("CreatedAt")
|
||||
if createdAtField.CanSet() {
|
||||
createdAtField.Set(reflect.ValueOf(parsedTime))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
// func (m *Model) BeforeCreate(tx *gorm.DB) (err error) {
|
||||
// // 动态访问 YourModel 结构体本身
|
||||
// model := tx.Statement.Dest
|
||||
//
|
||||
// // 设置创建时间
|
||||
// layout := "2006-01-02 15:04:05"
|
||||
// strTime := "2019-08-09 11:35:52"
|
||||
// parsedTime, err := time.Parse(layout, strTime)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// // 使用反射设置创建时间字段
|
||||
// createdAtField := reflect.ValueOf(model).Elem().FieldByName("CreatedAt")
|
||||
// if createdAtField.CanSet() {
|
||||
// createdAtField.Set(reflect.ValueOf(parsedTime))
|
||||
// }
|
||||
//
|
||||
// return nil
|
||||
// }
|
||||
|
||||
func (m *Model) BeforeUpdate(tx *gorm.DB) (err error) {
|
||||
m.UpdatedAt = LocalTime(time.Now())
|
||||
@ -86,3 +85,35 @@ func (m *Model) BeforeUpdate(tx *gorm.DB) (err error) {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// BeforeCreate 注册 BeforeCreate 回调函数
|
||||
func (m *Model) BeforeCreate(tx *gorm.DB) (err error) {
|
||||
IdName := ""
|
||||
field := tx.Statement.Schema.Fields
|
||||
for _, v := range field {
|
||||
if v.PrimaryKey {
|
||||
IdName = v.Name
|
||||
}
|
||||
}
|
||||
|
||||
if IdName == "" {
|
||||
return errors.New("主键错误")
|
||||
}
|
||||
|
||||
// 动态访问 YourModel 结构体本身
|
||||
model := tx.Statement.Dest
|
||||
// primaryField := reflect.ValueOf(model).Elem().FieldByName(IdName)
|
||||
//
|
||||
// if primaryField.CanSet() {
|
||||
// primaryField.SetColumn(reflect.ValueOf(parsedTime))
|
||||
// }
|
||||
|
||||
fmt.Println(model)
|
||||
m.CreatedAt = LocalTime(time.Now())
|
||||
tx.Statement.SetColumn("CreatedAt", m.CreatedAt)
|
||||
|
||||
m.UpdatedAt = LocalTime(time.Now())
|
||||
tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ package requests
|
||||
type RoleRequest struct {
|
||||
GetRoleList // 获取角色列表
|
||||
PutRoleStatus // 角色禁用/启用
|
||||
AddRole // 新增角色
|
||||
}
|
||||
|
||||
// GetRoleList 获取角色列表
|
||||
@ -19,4 +20,7 @@ type PutRoleStatus struct {
|
||||
|
||||
// AddRole 新增角色
|
||||
type AddRole struct {
|
||||
RoleName string `json:"role_name" form:"role_name" validate:"required" label:"角色名称"`
|
||||
IsAdmin int `json:"is_admin" form:"is_admin" validate:"oneof=0 1" label:"是否管理员"` // (0:否 1:是)
|
||||
MenuIds []int64 `json:"menu_ids" form:"menu_ids" validate:"required" label:"菜单"`
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ func (b *BasicService) Login(LoginRequest requests.Login) (basicResponse.Login,
|
||||
// 获取用户信息
|
||||
AdminUserDao := dao.AdminUserDao{}
|
||||
adminUser, err := AdminUserDao.GetAdminUserFirstByAccess(LoginRequest.Access)
|
||||
if err != nil || adminUser.UserID == 0 {
|
||||
if err != nil || adminUser == nil {
|
||||
return basicResponse.Login{}, errors.New("用户名或密码错误")
|
||||
}
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ func (r *MenuService) GetMenuList() ([]*menuResponse.GetMenuList, error) {
|
||||
AdminMenuDao := dao.AdminMenuDao{}
|
||||
adminMenu, _ := AdminMenuDao.GetAdminMenuListSortOrderNum()
|
||||
if adminMenu == nil {
|
||||
return []*menuResponse.GetMenuList{}, nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
menuMap := make(map[int64]*menuResponse.GetMenuList)
|
||||
|
||||
@ -2,9 +2,12 @@ package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/gin-gonic/gin"
|
||||
"hospital-admin-api/api/dao"
|
||||
"hospital-admin-api/api/model"
|
||||
"hospital-admin-api/api/requests"
|
||||
"hospital-admin-api/api/responses/roleResponse"
|
||||
"hospital-admin-api/global"
|
||||
)
|
||||
|
||||
type RoleService struct{}
|
||||
@ -85,7 +88,7 @@ func (r *RoleService) PutRoleStatus(roleId int64, roleStatus int) (bool, error)
|
||||
// 获取请求角色数据
|
||||
AdminRoleDao := dao.AdminRoleDao{}
|
||||
adminRole, err := AdminRoleDao.GetAdminRoleFirstById(roleId)
|
||||
if err != nil || adminRole.RoleId == 0 {
|
||||
if err != nil || adminRole == nil {
|
||||
return false, errors.New("非法操作")
|
||||
}
|
||||
|
||||
@ -107,7 +110,7 @@ func (r *RoleService) GetRole(roleId int64) (*roleResponse.GetRole, error) {
|
||||
// 获取请求角色数据
|
||||
AdminRoleDao := dao.AdminRoleDao{}
|
||||
adminRole, err := AdminRoleDao.GetAdminRoleFirstById(roleId)
|
||||
if err != nil || adminRole.RoleId == 0 {
|
||||
if err != nil || adminRole == nil {
|
||||
return nil, errors.New("非法操作")
|
||||
}
|
||||
|
||||
@ -128,3 +131,58 @@ func (r *RoleService) GetRole(roleId int64) (*roleResponse.GetRole, error) {
|
||||
|
||||
return GetRoleResponse, nil
|
||||
}
|
||||
|
||||
// AddRole 新增角色
|
||||
func (r *RoleService) AddRole(c *gin.Context, AddRoleRequest requests.AddRole) (bool, error) {
|
||||
roleId := c.GetInt64("RoleId")
|
||||
if roleId == 0 {
|
||||
return false, errors.New("数据错误")
|
||||
}
|
||||
|
||||
// 获取当前登陆用户数据
|
||||
AdminRoleDao := dao.AdminRoleDao{}
|
||||
adminRole, err := AdminRoleDao.GetAdminRoleFirstById(roleId)
|
||||
if err != nil || adminRole == nil {
|
||||
return false, errors.New("非法操作")
|
||||
}
|
||||
|
||||
if AddRoleRequest.IsAdmin == 1 && adminRole.IsAdmin == 0 {
|
||||
return false, errors.New("您当前为普通用户,无法添加管理员用户")
|
||||
}
|
||||
|
||||
AdminMenuDao := dao.AdminMenuDao{}
|
||||
|
||||
// 判断菜单id
|
||||
for _, menuId := range AddRoleRequest.MenuIds {
|
||||
adminMenu, _ := AdminMenuDao.GetAdminMenuById(menuId)
|
||||
if adminMenu == nil {
|
||||
return false, errors.New("菜单错误")
|
||||
}
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
// defer func() {
|
||||
// if r := recover(); r != nil {
|
||||
// tx.Rollback()
|
||||
// }
|
||||
// }()
|
||||
|
||||
// 新增角色
|
||||
AdminRoleModel := &model.AdminRole{
|
||||
RoleId: 10,
|
||||
RoleName: AddRoleRequest.RoleName,
|
||||
IsAdmin: AddRoleRequest.IsAdmin,
|
||||
}
|
||||
|
||||
adminRole, err = AdminRoleDao.AddAdminRole(tx, AdminRoleModel)
|
||||
if err != nil || adminRole == nil {
|
||||
tx.Rollback()
|
||||
return false, errors.New("非法操作")
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
// 新增角色菜单
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
@ -2,6 +2,8 @@ port: 8198 # 启动端口
|
||||
|
||||
env: dev # 环境配置
|
||||
|
||||
snowflake: 1 # 雪花算法机器id
|
||||
|
||||
# [数据库配置]
|
||||
mysql:
|
||||
host: '42.193.16.243'
|
||||
@ -14,7 +16,8 @@ mysql:
|
||||
debug: true
|
||||
|
||||
log:
|
||||
file-path: "/var/log/dev-hospital-admin-api/"
|
||||
file-path: "./log/"
|
||||
# file-path: "/var/log/dev-hospital-admin-api/"
|
||||
file-name: "hospital-admin-api.log"
|
||||
|
||||
# [redis]
|
||||
|
||||
@ -10,4 +10,5 @@ type Config struct {
|
||||
Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"`
|
||||
Jwt Jwt `mapstructure:"jwt" json:"jwt" yaml:"jwt"`
|
||||
Oss Oss `mapstructure:"oss" json:"oss" yaml:"oss"`
|
||||
Snowflake int64 `mapstructure:"snowflake" json:"snowflake" yaml:"snowflake"`
|
||||
}
|
||||
|
||||
1
go.mod
1
go.mod
@ -19,6 +19,7 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/bwmarrin/snowflake v0.3.0 // indirect
|
||||
github.com/bytedance/sonic v1.9.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
|
||||
|
||||
2
go.sum
2
go.sum
@ -38,6 +38,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
|
||||
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
|
||||
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
|
||||
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
|
||||
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user