Support menu team.

pull/296/head
ruibaby 2019-08-28 08:04:54 +08:00
parent 0f5c836e63
commit 46b10fb342
8 changed files with 107 additions and 3 deletions

View File

@ -10,6 +10,7 @@ import run.halo.app.model.entity.Menu;
* Menu output dto.
*
* @author johnniang
* @author ryanwang
* @date 4/3/19
*/
@Data
@ -30,4 +31,6 @@ public class MenuDTO implements OutputConverter<MenuDTO, Menu> {
private String icon;
private Integer parentId;
private String team;
}

View File

@ -60,6 +60,12 @@ public class Menu extends BaseEntity {
@Column(name = "parent_id", columnDefinition = "int default 0")
private Integer parentId;
/**
* Menu team name.
*/
@Column(name = "team", columnDefinition = "varchar(255) default ''")
private String team;
@Override
public void prePersist() {
super.prePersist();
@ -81,5 +87,9 @@ public class Menu extends BaseEntity {
if (parentId == null) {
parentId = 0;
}
if(team == null){
team = "";
}
}
}

View File

@ -43,6 +43,13 @@ public class MenuTagDirective implements TemplateDirectiveModel {
case "tree":
env.setVariable("menus", builder.build().wrap(menuService.listAsTree(Sort.by(DESC, "priority"))));
break;
case "listTeams":
env.setVariable("teams", builder.build().wrap(menuService.listTeamVos(Sort.by(DESC, "priority"))));
break;
case "listByTeam":
String team = params.get("team").toString();
env.setVariable("menus", builder.build().wrap(menuService.listByTeam(team, Sort.by(DESC, "priority"))));
break;
case "count":
env.setVariable("count", builder.build().wrap(menuService.count()));
break;

View File

@ -13,6 +13,7 @@ import javax.validation.constraints.Size;
* Menu param.
*
* @author johnniang
* @author ryanwang
* @date 4/3/19
*/
@Data
@ -37,4 +38,7 @@ public class MenuParam implements InputConverter<Menu> {
private String icon;
private Integer parentId;
@Size(max = 255, message = "菜单分组的字符长度不能超过 {max}")
private String team;
}

View File

@ -0,0 +1,22 @@
package run.halo.app.model.vo;
import lombok.Data;
import lombok.ToString;
import run.halo.app.model.dto.MenuDTO;
import java.util.List;
/**
* Menu team vo.
*
* @author ryanwang
* @date : 2019/8/28
*/
@Data
@ToString
public class MenuTeamVO {
private String team;
private List<MenuDTO> menus;
}

View File

@ -1,5 +1,6 @@
package run.halo.app.repository;
import org.springframework.data.domain.Sort;
import org.springframework.lang.NonNull;
import run.halo.app.model.entity.Menu;
import run.halo.app.repository.base.BaseRepository;
@ -10,6 +11,8 @@ import java.util.List;
* Menu repository.
*
* @author johnniang
* @author ryanwang
* @date 2019-8-28
*/
public interface MenuRepository extends BaseRepository<Menu, Integer> {
@ -18,4 +21,6 @@ public interface MenuRepository extends BaseRepository<Menu, Integer> {
boolean existsByIdNotAndName(@NonNull Integer id, @NonNull String name);
List<Menu> findByParentId(@NonNull Integer id);
List<Menu> findByTeam(String team, Sort sort);
}

View File

@ -5,6 +5,7 @@ import org.springframework.lang.NonNull;
import run.halo.app.model.dto.MenuDTO;
import run.halo.app.model.entity.Menu;
import run.halo.app.model.params.MenuParam;
import run.halo.app.model.vo.MenuTeamVO;
import run.halo.app.model.vo.MenuVO;
import run.halo.app.service.base.CrudService;
@ -28,6 +29,24 @@ public interface MenuService extends CrudService<Menu, Integer> {
@NonNull
List<MenuDTO> listDtos(@NonNull Sort sort);
/**
* Lists menu team vos.
*
* @param sort must not be null
* @return a list of menu team vo
*/
@NonNull
List<MenuTeamVO> listTeamVos(@NonNull Sort sort);
/**
* List menus by team.
*
* @param team team
* @param sort sort
* @return list of menus
*/
List<MenuDTO> listByTeam(@NonNull String team, Sort sort);
/**
* Creates a menu.
*

View File

@ -9,15 +9,14 @@ import run.halo.app.exception.AlreadyExistsException;
import run.halo.app.model.dto.MenuDTO;
import run.halo.app.model.entity.Menu;
import run.halo.app.model.params.MenuParam;
import run.halo.app.model.vo.MenuTeamVO;
import run.halo.app.model.vo.MenuVO;
import run.halo.app.repository.MenuRepository;
import run.halo.app.service.MenuService;
import run.halo.app.service.base.AbstractCrudService;
import run.halo.app.utils.ServiceUtils;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -43,6 +42,41 @@ public class MenuServiceImpl extends AbstractCrudService<Menu, Integer> implemen
return convertTo(listAll(sort));
}
@Override
public List<MenuTeamVO> listTeamVos(Sort sort) {
Assert.notNull(sort, "Sort info must not be null");
// List all menus
List<MenuDTO> menus = listDtos(sort);
// Get teams
Set<String> teams = ServiceUtils.fetchProperty(menus, MenuDTO::getTeam);
// Convert to team menu list map (Key: team, value: menu list)
Map<String, List<MenuDTO>> teamMenuListMap = ServiceUtils.convertToListMap(teams, menus, MenuDTO::getTeam);
List<MenuTeamVO> result = new LinkedList<>();
// Wrap menu team vo list
teamMenuListMap.forEach((team, menuList) -> {
// Build menu team vo
MenuTeamVO menuTeamVO = new MenuTeamVO();
menuTeamVO.setTeam(team);
menuTeamVO.setMenus(menuList);
// Add it to result
result.add(menuTeamVO);
});
return result;
}
@Override
public List<MenuDTO> listByTeam(String team, Sort sort) {
List<Menu> menus = menuRepository.findByTeam(team, sort);
return menus.stream().map(menu -> (MenuDTO) new MenuDTO().convertFrom(menu)).collect(Collectors.toList());
}
@Override
public Menu createBy(MenuParam menuParam) {
Assert.notNull(menuParam, "Menu param must not be null");