package service import ( "errors" "hospital-admin-api/api/dao" "hospital-admin-api/api/model" "hospital-admin-api/api/requests" "hospital-admin-api/api/responses/menuResponse" "hospital-admin-api/global" ) type MenuService struct{} // GetMenuList 获取菜单列表 func (r *MenuService) GetMenuList() ([]*menuResponse.GetMenuList, error) { // 获取全部菜单 AdminMenuDao := dao.AdminMenuDao{} adminMenu, _ := AdminMenuDao.GetAdminMenuListSortOrderNum() if adminMenu == nil { return nil, nil } menuMap := make(map[int64]*menuResponse.GetMenuList) var menuTree []*menuResponse.GetMenuList for _, menu := range adminMenu { node := &menuResponse.GetMenuList{ MenuId: menu.MenuId, MenuName: menu.MenuName, MenuTitle: menu.MenuTitle, ParentId: menu.ParentId, MenuStatus: menu.MenuStatus, MenuType: menu.MenuType, Permission: menu.Permission, OrderNum: menu.OrderNum, Icon: menu.Icon, Path: menu.Path, Component: menu.Component, Children: nil, } menuMap[menu.MenuId] = node } // 构建菜单树 for _, menu := range adminMenu { if menu.ParentId == 0 { menuTree = append(menuTree, menuMap[menu.MenuId]) } else if parent, ok := menuMap[menu.ParentId]; ok { parent.Children = append(parent.Children, menuMap[menu.MenuId]) } } return menuTree, nil } // AddMenu 新增菜单 func (r *MenuService) AddMenu(AddMenuRequest requests.AddMenu) (bool, error) { AdminMenuDao := dao.AdminMenuDao{} AdminMenuApiDao := dao.AdminMenuApiDao{} AdminApiDao := dao.AdminApiDao{} // 判断父级id if AddMenuRequest.ParentId != 0 { adminMenu, _ := AdminMenuDao.GetAdminMenuById(AddMenuRequest.ParentId) if adminMenu == nil { return false, errors.New("上级菜单错误") } } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() // 新增菜单 AdminMenuModel := &model.AdminMenu{ MenuName: AddMenuRequest.MenuName, MenuTitle: AddMenuRequest.MenuTitle, ParentId: AddMenuRequest.ParentId, MenuStatus: AddMenuRequest.MenuStatus, MenuType: AddMenuRequest.MenuType, Permission: AddMenuRequest.Permission, OrderNum: AddMenuRequest.OrderNum, Icon: AddMenuRequest.Icon, Path: AddMenuRequest.Path, Component: AddMenuRequest.Component, } adminMenu, _ := AdminMenuDao.AddAdminMenu(tx, AdminMenuModel) if adminMenu == nil { tx.Rollback() return false, errors.New("新增失败") } // 新增菜单api if len(AddMenuRequest.ApiIds) > 0 { for _, v := range AddMenuRequest.ApiIds { // 检测api adminApi, _ := AdminApiDao.GetAdminApiById(v) if adminApi == nil { tx.Rollback() return false, errors.New("接口不存在") } AdminMenuApiModel := &model.AdminMenuApi{ MenuId: adminMenu.MenuId, ApiId: v, } adminMenuApi, _ := AdminMenuApiDao.AddAdminMenuApi(tx, AdminMenuApiModel) if adminMenuApi == nil { tx.Rollback() return false, errors.New("新增失败") } } } tx.Commit() return true, nil } // PutMenu 修改菜单 func (r *MenuService) PutMenu(PutMenuRequest requests.PutMenu) (bool, error) { AdminMenuDao := dao.AdminMenuDao{} AdminMenuApiDao := dao.AdminMenuApiDao{} AdminApiDao := dao.AdminApiDao{} // 判断父级id if PutMenuRequest.ParentId != 0 { adminMenu, _ := AdminMenuDao.GetAdminMenuById(PutMenuRequest.ParentId) if adminMenu == nil { return false, errors.New("上级菜单错误") } } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() // 新增菜单 AdminMenuModel := &model.AdminMenu{ MenuName: PutMenuRequest.MenuName, MenuTitle: PutMenuRequest.MenuTitle, ParentId: PutMenuRequest.ParentId, MenuStatus: PutMenuRequest.MenuStatus, MenuType: PutMenuRequest.MenuType, Permission: PutMenuRequest.Permission, OrderNum: PutMenuRequest.OrderNum, Icon: PutMenuRequest.Icon, Path: PutMenuRequest.Path, Component: PutMenuRequest.Component, } adminMenu, _ := AdminMenuDao.AddAdminMenu(tx, AdminMenuModel) if adminMenu == nil { tx.Rollback() return false, errors.New("新增失败") } // 新增菜单api if len(PutMenuRequest.ApiIds) > 0 { for _, v := range PutMenuRequest.ApiIds { // 检测api adminApi, _ := AdminApiDao.GetAdminApiById(v) if adminApi == nil { tx.Rollback() return false, errors.New("接口不存在") } AdminMenuApiModel := &model.AdminMenuApi{ MenuId: adminMenu.MenuId, ApiId: v, } adminMenuApi, _ := AdminMenuApiDao.AddAdminMenuApi(tx, AdminMenuApiModel) if adminMenuApi == nil { tx.Rollback() return false, errors.New("新增失败") } } } tx.Commit() return true, nil }