// ============================================================================ // This is auto-generated by gf cli tool only once. Fill this file as you wish. // ============================================================================ package service import ( "context" "dashoo.cn/common_definition/admin/menu_def" "dashoo.cn/micro/app/dao" "dashoo.cn/micro/app/model" "dashoo.cn/opms_libary/myerrors" "errors" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/util/gconv" ) type MenuService struct { *contextService Dao *dao.SysMenuDao } func NewMenuService(ctx context.Context) (svc *MenuService, err error) { svc = new(MenuService) if svc.contextService, err = svc.Init(ctx); err != nil { return nil, err } svc.Dao = dao.NewSysMenuDao(svc.Tenant) return svc, nil } // Create 添加菜单项 func (s MenuService) Create(param *model.SysMenuReq) (id int64, err error) { // 菜单类型 M目录C菜单 F按钮 if param.MenuType == "F" && param.Perms == "" { return -1, errors.New("权限标识不能为空!") } if param.Perms != "" { count, err := s.Dao.Count("Perms", param.Perms) if err != nil { return -1, err } if count > 0 { return -1, errors.New("权限标识已存在。") } } if param.MenuType == "M" { param.Component = "Layout" } var entity *model.SysMenu if err := gconv.Struct(param, &entity); err != nil { return -1, err } SetCreatedInfo(entity, s.GetCxtUserId(), s.GetCxtUserName()) if result, err := s.Dao.Insert(entity); err != nil { return -1, err } else { id, err := result.LastInsertId() if err != nil { return -1, err } return id, nil } } // UpdateById 根据ID更新菜单项 func (s MenuService) UpdateById(param *model.SysMenuReq) error { // 菜单类型 M目录C菜单 F按钮 if param.MenuType == "F" && param.Perms == "" { return myerrors.TipsError("权限标识不能为空!") } if param.MenuType == "M" { param.Component = "Layout" } var entity *model.SysMenu if err := gconv.Struct(param, &entity); err != nil { g.Log().Error(err) return myerrors.TipsError("数据转换异常,请重新尝试") } db := s.Dao.M menu, err := db.FindOne("Id", entity.Id) if err != nil { return err } if menu.IsEmpty() { return myerrors.TipsError("菜单不存在") } if entity.Perms != "" { exist, err := db.Where("Id !=?", entity.Id).Where("perms", entity.Perms).FindOne() if err != nil { return err } if !exist.IsEmpty() { return myerrors.TipsError("权限标识已存在。") } } SetUpdatedInfo(entity, s.GetCxtUserId(), s.GetCxtUserName()) _, err = db.FieldsEx(UpdateFieldEx...).Where("Id", entity.Id).Update(entity) if err != nil { return err } return err } func (s MenuService) Delete(id int64) (err error) { db := s.Dao record, err := db.FindOne("Id", id) if err != nil { return err } if record == nil { return myerrors.TipsError("菜单不存在") } _, err = db.Delete("Id", id) return err } // GetEntity 获取菜单项实体 func (s MenuService) GetEntity(id int64) (*model.SysMenu, error) { one, err := s.Dao.M.FindOne(id) if err != nil { return nil, err } if one.IsEmpty() { return nil, nil } var entity *model.SysMenu if err = one.Struct(&entity); err != nil { return nil, err } return entity, nil } // GetList 获取菜单列表 func (s MenuService) GetList(param *menu_def.SelectReq) ([]model.SysMenu, error) { db := s.Dao.M if param != nil { if param.Title != "" { db = db.Where("menu_name like ?", "%"+param.Title+"%") } if param.Visible != "" { db = db.Where("visible", param.Visible) } if param.Order != "" { sort := "ASC" if !param.IsAsc { sort = "DESC" } db = db.Order(param.Order + " " + sort) } else { db = db.Order("sort") } } result := make([]model.SysMenu, 0) if err := db.OrderAsc(s.Dao.C.Sort).FindScan(&result); err != nil { return nil, err } return result, nil } // GetMenuTree 获取菜单树 func (s MenuService) GetMenuTree(isAll bool) ([]model.MenuTree, error) { menuType := g.Slice{"M", "C"} if isAll { menuType = g.Slice{"M", "C", "F"} } menuList := make([]model.SysMenu, 0) err := s.Dao.Where("status = 10").Where("menu_type IN (?)", menuType).OrderAsc(s.Dao.C.Sort).Scan(&menuList) treeMap := make(map[int][]model.MenuTree, 0) for _, v := range menuList { treeMap[v.ParentId] = append(treeMap[v.ParentId], v.ConvMenuTree()) } menuTree := treeMap[0] for i := 0; i < len(menuTree); i++ { s.getChildrenList(&menuTree[i], treeMap) } return menuTree, err } // GetUserRoleMenuTree 用户获取角色菜单树 func (s MenuService) GetUserRoleMenuTree(roles []int) ([]model.MenuTree, error) { menuList := make([]model.SysMenu, 0) err := s.Dao.Where(s.Dao.C.Status, "10").WhereIn(s.Dao.C.MenuType, g.Slice{"M", "C"}). WhereIn(s.Dao.C.Id, dao.NewSysRoleMenuDao(s.Tenant).WhereIn(dao.SysRoleMenu.C.RoleId, roles).Fields(dao.SysRoleMenu.C.MenuId).M). OrderAsc(s.Dao.C.Sort).Scan(&menuList) if err != nil { return nil, err } treeMap := make(map[int][]model.MenuTree, 0) for _, v := range menuList { treeMap[v.ParentId] = append(treeMap[v.ParentId], v.ConvMenuTree()) } menuTree := treeMap[0] for i := 0; i < len(menuTree); i++ { s.getChildrenList(&menuTree[i], treeMap) } return menuTree, err } // getChildrenList 获取菜单的子菜单 func (s MenuService) getChildrenList(menu *model.MenuTree, treeMap map[int][]model.MenuTree) { if value, ok := treeMap[menu.Id]; ok { menu.Children = value for i := 0; i < len(menu.Children); i++ { s.getChildrenList(&menu.Children[i], treeMap) } } }