...
|
...
|
@@ -8,6 +8,7 @@ import ( |
|
|
"gitlab.fjmaimaimai.com/mmm-go-pp/terms/pkg/application/menu/command"
|
|
|
"gitlab.fjmaimaimai.com/mmm-go-pp/terms/pkg/application/menu/query"
|
|
|
"gitlab.fjmaimaimai.com/mmm-go-pp/terms/pkg/domain"
|
|
|
"gitlab.fjmaimaimai.com/mmm-go-pp/terms/pkg/infrastructure/common"
|
|
|
"strconv"
|
|
|
)
|
|
|
|
...
|
...
|
@@ -49,14 +50,24 @@ func (menuService *MenuService) CreateMenu(createMenuCommand *command.CreateMenu |
|
|
} else {
|
|
|
menuRepository = value
|
|
|
}
|
|
|
// 1.菜单类型验证
|
|
|
if newMenu.ValidMenuType() {
|
|
|
return nil, application.ThrowError(application.ARG_ERROR, domain.ErrorMenuType.Error())
|
|
|
}
|
|
|
// 2.菜单编码验证
|
|
|
if menu, err := menuRepository.FindOne(map[string]interface{}{"code": createMenuCommand.Code}); err == nil && menu != nil {
|
|
|
return nil, application.ThrowError(application.ARG_ERROR, fmt.Sprintf("菜单编码:%v已重复,请重新输入", createMenuCommand.Code))
|
|
|
}
|
|
|
// 3.更新菜单路径
|
|
|
if newMenu.ParentId > 0 {
|
|
|
if pMenu, err := menuRepository.FindOne(map[string]interface{}{"menuId": newMenu.ParentId}); err != nil {
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "父级菜单不存在")
|
|
|
} else {
|
|
|
newMenu.ParentPath = pMenu.GetParentPath()
|
|
|
newMenu.Category = pMenu.GetCategory()
|
|
|
}
|
|
|
}
|
|
|
// 4.保存菜单项
|
|
|
if menu, err := menuRepository.Save(newMenu); err != nil {
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
} else {
|
...
|
...
|
@@ -127,7 +138,7 @@ func (menuService *MenuService) ListMenu(listMenuQuery *query.ListMenuQuery) (in |
|
|
} else {
|
|
|
menuRepository = value
|
|
|
}
|
|
|
queryOptions := tool_funs.SimpleStructToMap(listMenuQuery)
|
|
|
queryOptions := common.SimpleStructToMap(listMenuQuery)
|
|
|
if len(listMenuQuery.MenuCategory) > 0 {
|
|
|
queryOptions["code"] = ""
|
|
|
if m, e := menuRepository.FindOne(map[string]interface{}{"code": listMenuQuery.MenuCategory}); e == nil && m != nil {
|
...
|
...
|
@@ -140,6 +151,18 @@ func (menuService *MenuService) ListMenu(listMenuQuery *query.ListMenuQuery) (in |
|
|
if err := transactionContext.CommitTransaction(); err != nil {
|
|
|
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
|
|
|
}
|
|
|
// 树形返回
|
|
|
if listMenuQuery.StructType == domain.StructTree {
|
|
|
var treeNodes = make([]domain.TreeNode, len(menus))
|
|
|
for i := 0; i < len(menus); i++ {
|
|
|
treeNodes[i] = menus[i]
|
|
|
}
|
|
|
return map[string]interface{}{
|
|
|
"count": count,
|
|
|
"menus": domain.NewTrees(treeNodes).Nodes,
|
|
|
}, nil
|
|
|
}
|
|
|
// 列表返回
|
|
|
return map[string]interface{}{
|
|
|
"count": count,
|
|
|
"menus": menus,
|
...
|
...
|
@@ -170,6 +193,7 @@ func (menuService *MenuService) RemoveMenu(removeMenuCommand *command.RemoveMenu |
|
|
} else {
|
|
|
menuRepository = value
|
|
|
}
|
|
|
// 1.节点是否存在
|
|
|
menu, err := menuRepository.FindOne(map[string]interface{}{"menuId": removeMenuCommand.MenuId})
|
|
|
if err != nil {
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
...
|
...
|
@@ -177,6 +201,10 @@ func (menuService *MenuService) RemoveMenu(removeMenuCommand *command.RemoveMenu |
|
|
if menu == nil {
|
|
|
return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(removeMenuCommand.MenuId)))
|
|
|
}
|
|
|
// 2. 是否存在子节点
|
|
|
if m, err := menuRepository.FindOne(map[string]interface{}{"parentId": menu.MenuId}); err == nil && m != nil {
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "下级菜单不为空")
|
|
|
}
|
|
|
if menu, err := menuRepository.Remove(menu); err != nil {
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
} else {
|
...
|
...
|
@@ -217,7 +245,13 @@ func (menuService *MenuService) UpdateMenu(updateMenuCommand *command.UpdateMenu |
|
|
if menu == nil {
|
|
|
return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateMenuCommand.MenuId)))
|
|
|
}
|
|
|
// 父级节点有发生更新
|
|
|
// 1.验证code是否有重复的情况
|
|
|
if menu.Code != updateMenuCommand.Code {
|
|
|
if m, e := menuRepository.FindOne(map[string]interface{}{"code": updateMenuCommand.Code}); e == nil && m.MenuId != menu.MenuId {
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
}
|
|
|
}
|
|
|
// 2.验证父级节点是否有发生更新
|
|
|
if updateMenuCommand.ParentId != menu.ParentId && (updateMenuCommand.ParentId != 0 && menu.ParentId != 0) {
|
|
|
var oldParentFullPath, newParentFullPath = menu.GetFullPath(), menu.GetFullPath()
|
|
|
var oldParentPath = menu.ParentPath
|
...
|
...
|
|