| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- // ============================================================================
- // 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)
- }
- }
- }
|