效果圖
第一步 需要再定義常量資源
//信訪聽證 資源前綴
public static final String RESPREFIX_MODULE_XINFTZ_="module_xinftz_";
//聽證專家?guī)?/span>
public static final ConstantItem RES_MODULE_XINFTZ_TINGZZJK = new ConstantItem(RESPREFIX_MODULE_XINFTZ_ + "tingzzjk","聽證專家?guī)?);
//聽證模板庫
public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK = new ConstantItem(RESPREFIX_MODULE_XINFTZ_ + "tingzmbk","聽證模板庫");
//聽證模板庫
public static final String RESPREFIX_MODULE_XINFTZMBK_="module_xinftzmbk_";//聽證模板庫
public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_PILDRMB = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"pildrmb","批量導(dǎo)入模板");
public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_DAORMB = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"daormb","導(dǎo)入模板");
public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_BIANJ = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"bianj","編輯");
public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_SHANC = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"shanc","刪除");
public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_TUODBS = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"tuodbs","拖動(dòng)標(biāo)識(shí)");
第二部組裝數(shù)據(jù)
private static final String RESCATEGORY_MODULE_XINFTZ=XysdSysConstants.RESPREFIX_MODULE_XINFTZ_;//信訪聽證
private static final String RESCATEGORY_MODULE_XINFTZ_TINGZZJK=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZZJK.getId();//聽證專家?guī)?/span>
private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBK=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK.getId();//聽證模板庫
private static final String RESPREFIX_MODULE_XINFTZMBK=(String)XysdSysConstants.RESPREFIX_MODULE_XINFTZMBK_;//聽證模板庫
private static final String RESCATEGORY_MODULE_XINFTZ_TINGZDJ=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZDJ.getId();//聽證登記
private static final String RESCATEGORY_MODULE_XINFTZ_BENDWTZCX=(String)XysdSysConstants.RES_MODULE_XINFTZ_BENDWTZCX.getId();//本單位聽證查詢
private static final String RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX=(String)XysdSysConstants.RES_MODULE_XINFTZ_ZERDWTZCX.getId();//責(zé)任單位聽證查詢
private static final String RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX=(String)XysdSysConstants.RES_MODULE_XINFTZ_BENDWCYTZCX.getId();//本單位參與聽證查詢
private static final String RESCATEGORY_MODULE_XINFTZ_TINGZTJ=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZTJ.getId();//聽證統(tǒng)計(jì)
private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_PILDRMB.getId();//批量導(dǎo)入模板
private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_DAORMB.getId();//導(dǎo)入模板
private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_BIANJ.getId();//編輯
private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_SHANC.getId();//刪除
private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_TUODBS.getId();//拖動(dòng)標(biāo)識(shí)
private List<TreeNode> buildTreeNodes(List<SysDataSimpleDTO> resList) {
List<TreeNode> nodes=new ArrayList<>();
List<TreeNode> xinftzResList=new ArrayList<>();//信訪聽證
xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ,"信訪聽證",null,"root",false,"Category",false));
List<TreeNode> xinftmbkzResList=new ArrayList<>();//信訪聽證
xinftmbkzResList.add(new TreeNode(RESPREFIX_MODULE_XINFTZMBK,"聽證模板庫",null,"root",false,"Category",false));
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZZJK)){//信訪聽證-聽證專家?guī)?/span>
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZZJK)) {
xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZZJK,"聽證專家?guī)?,null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZZJK, new SysDataSimpleDTO());
}
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZDJ)){//信訪聽證-聽證登記
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZDJ)) {
xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZDJ,"聽證登記",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZDJ, new SysDataSimpleDTO());
}
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_BENDWTZCX)){//信訪聽證-本單位聽證查詢
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_BENDWTZCX)) {
xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_BENDWTZCX,"本單位聽證查詢",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_BENDWTZCX, new SysDataSimpleDTO());
}
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX)){//信訪聽證-責(zé)任單位聽證查詢
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX)) {
xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX,"責(zé)任單位聽證查詢",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX, new SysDataSimpleDTO());
}
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX)){//信訪聽證-本單位參與聽證查詢
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX)) {
xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX,"本單位參與聽證查詢",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX, new SysDataSimpleDTO());
}
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZTJ)){//信訪聽證-聽證統(tǒng)計(jì)
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZTJ)) {
xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZTJ,"聽證統(tǒng)計(jì)",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZTJ, new SysDataSimpleDTO());
}
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBK)){//信訪聽證-聽證模板庫
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBK)) {
xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBK,"聽證模板庫",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBK, new SysDataSimpleDTO());
}
xinftzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBK,false,"Res",false));
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB)){//信訪聽證-聽證模板庫批量導(dǎo)入
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB)) {
xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB,"批量導(dǎo)入模板",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB, new SysDataSimpleDTO());
}
xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB,false,"Res",false));
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB)){//信訪聽證-聽證模板庫導(dǎo)入模板
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB)) {
xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB,"導(dǎo)入模板",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB, new SysDataSimpleDTO());
}
xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB,false,"Res",false));
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ)){//信訪聽證-聽證模板庫編輯
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ)) {
xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ,"編輯",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ, new SysDataSimpleDTO());
}
xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ,false,"Res",false));
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC)){//信訪聽證-聽證模板庫刪除
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC)) {
xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC,"刪除",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC, new SysDataSimpleDTO());
}
xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC,false,"Res",false));
continue;
}
if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS)){//信訪聽證-聽證模板庫拖動(dòng)標(biāo)識(shí)
if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS)) {
xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS,"拖動(dòng)標(biāo)識(shí)",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));
handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS, new SysDataSimpleDTO());
}
xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS,false,"Res",false));
continue;
}
//信訪聽證資源
nodes.addAll(xinftzResList);
//信訪聽證模板庫資源
nodes.addAll(xinftmbkzResList);
return nodes;
第三步 定義接口
@ApiOperation(value="樹-獲取所有節(jié)點(diǎn)", httpMethod="POST")
@ApiImplicitParam(name="params", value="參數(shù)集合", dataType="Map<String,String>")
@RequestMapping(value="/allnodes/get",method=RequestMethod.POST)
public ApiResultDTO<List<TreeNode>> getAllTreeNodes(@RequestBody Map<String,String> params,HttpServletRequest hreq){
return RestAPITemplate.restapi(new IMyLogic<List<TreeNode>>() {
@Override
public List<TreeNode> logic() {
AccessTokenUser user=new AccessTokenUserAssembler().getAccessTokenUserFromReq(hreq);
String treeType=params.get("treeType");
ITreeService treeService=getTreeServiceByTreeType(treeType);
return treeService.getAllTreeNodes(user, params);
}
});
}
public List<TreeNode> getAllTreeNodes(AccessTokenUser user,Map<String, String> params) {
List<SysDataSimpleDTO> resList=systemGatewayService.findAllResList();
List<TreeNode> nodes=this.buildTreeNodes(resList);
return nodes;
}
返回值模型
ApiModel(value="MenuDTO ",description="菜單模型")
@JsonIgnoreProperties(ignoreUnknown=true)
public class MenuDTO {
@ApiModelProperty(value="菜單標(biāo)識(shí)")
private String id;
@ApiModelProperty(value="菜單名稱")
private String name;
@ApiModelProperty(value="菜單名稱簡稱")
private String simpleName;
@ApiModelProperty(value="菜單打開的鏈接地址")
private String url;
@ApiModelProperty(value="菜單描述")
private String description;
@ApiModelProperty(value="是否顯示")
private Boolean isShow = false;
@ApiModelProperty(value="子菜單")
private List<MenuDTO> submenus = new ArrayList<MenuDTO>();
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getSimpleName() {
return simpleName;
}
public String getUrl() {
return url;
}
public String getDescription() {
return description;
}
public void setSubmenus(List<MenuDTO> submenus) {
this.submenus = submenus;
}
public List<MenuDTO> getSubmenus() {
return submenus;
}
public Boolean getShow() {
return isShow;
}
public void setShow(Boolean show) {
isShow = show;
}
public MenuDTO() {
super();
}
public MenuDTO(String id, String name, String simpleName) {
super();
this.id = id;
this.name = name;
this.simpleName=simpleName;
if(StringUtils.isNotBlank(name) && StringUtils.isBlank(simpleName)){
this.simpleName=name.substring(0,2);
}
}
public MenuDTO(String id, String name, String simpleName, String url, String description) {
super();
this.id = id;
this.name = name;
this.simpleName=simpleName;
if(StringUtils.isNotBlank(name) && StringUtils.isBlank(simpleName)){
this.simpleName=name.substring(0,2);
}
this.url = url;
this.description = description;
}
/**************************************************************開始格式化數(shù)據(jù)方法**************************************************************/
/**
* 是否有子菜單
* @return
*/
public boolean isHasSubMenus() {
return this.submenus.size()>0;
}
}
請(qǐng)求參數(shù)
{
"treeType": "resourceTree"
}
返回值
效果圖
將用戶與資源關(guān)聯(lián)
@AuditLogEnregistor(module="角色管理",action="保存")
@ApiOperation(value="保存角色", httpMethod="POST")
@ApiImplicitParam(name="roleDTO", value="角色詳情", required=true)
@RequestMapping(value="/save", method=RequestMethod.POST)
public ApiResultDTO<RoleDTO> saveRole(@RequestBody RoleDTO roleDTO,HttpServletRequest hreq) {
return RestAPITemplate.restapi(new IMyLogic<RoleDTO>() {
@Override
public RoleDTO logic() {
AccessTokenUser user=new AccessTokenUserAssembler().getAccessTokenUserFromReq(hreq);
roleService.saveRole(user,null,roleDTO);
return roleDTO;
}
});
}
public void saveRole(AccessTokenUser user, Date operateTime, RoleDTO roleDTO) {
if(roleDTO.getParent()==null||StringUtils.isBlank(roleDTO.getParent().getId())){
throw new RuntimeException("請(qǐng)選擇上級(jí)節(jié)點(diǎn)!");
}
//this.checkRoleCanEditByRoleName(roleDTO.getName());//檢查可編輯權(quán)限
RoleDTOAssembler roleDTOAssembler=new RoleDTOAssembler(this.beansFactoryService);
String roleId=roleDTO.getId();
String parentId=roleDTO.getParent().getId();
Role role=null;
Role parent=this.roleRepository.getRoleById(parentId);
if(parent==null){
throw new RuntimeException("未找到上級(jí)節(jié)點(diǎn)!");
}
String oldParentId=null;
Integer oldOrderNo=null;
if(StringUtils.isBlank(roleId)){
role = roleDTOAssembler.fromRoleDTO(roleDTO);
role.updateCreateInfo(user, operateTime, parent);
}else{
role=this.roleRepository.getRoleById(roleId);
if(role==null){
throw new RuntimeException("根據(jù)角色id未找到相應(yīng)的角色!");
}
//this.checkRoleCanEditByRoleName(role.getName());//檢查可編輯權(quán)限
oldParentId=role.getParent().getId();
oldOrderNo=role.getOrderNo();
String name=roleDTO.getName();
String visibleLevel=roleDTO.getVisibleLevel();
String resourceCodes = roleDTO.obtainResourceCodes();
String comments=roleDTO.getComments();
int orderNo=roleDTO.getOrderNo();
role.updateRole(user, operateTime, parent, name, visibleLevel, resourceCodes,comments, orderNo);
}
roleRepository.createOrUpdateRole(role);
if (oldParentId==null || oldOrderNo==null || oldOrderNo!=role.getOrderNo() ||!oldParentId.equals(role.getParent().getId())){
//更新fullId和fullOrder
roleDomainService.updateRoleFullIdAndFullOrder(user, operateTime,role);
roleRepository.createOrUpdateRole(role);
}
//更新角色 用戶關(guān)系
roleDomainService.updateRoleUsers(user, operateTime,roleDTO.getUsers(),role);
if (StringUtils.isBlank(roleDTO.getId())){
roleDTO.setId(role.getId());
}
}
實(shí)體模型
@Entity
@Table(name = "T_ROLE")
public class Role extends ExBizEntity {
public static final String NODETYPE_ROOT = "Root";
public static final String NODETYPE_CATEGORY = "Category";
public static final String NODETYPE_ROLE = "Role";
@Column(length=200)
private String name;//角色名稱
@Column(length=20)
private String nodeType;//節(jié)點(diǎn)類型
@Column(length=100)
private String visibleLevel;//可見級(jí)別
@Column(columnDefinition="text")
private String resourceCodes;//擁有的資源的資源編碼
@OneToMany(mappedBy="roleId")
@OrderBy("createTime,id")
private Set<RoleUser> roleUsers = new LinkedHashSet<RoleUser>();//擁有此角色的用戶
@Column(length = 500)
private String fullId;//增強(qiáng)樹,全路徑
@Column(length = 500)
private String fullOrder;//增強(qiáng)樹排序
@Column(length = 1000)
private String comments;//說明
private int orderNo = 0;//歸口順序號(hào)
@ManyToOne(fetch = FetchType.LAZY)
private Role parent;//父節(jié)點(diǎn)
@OneToMany(mappedBy = "parent")
@OrderBy("orderNo")
private Set<Role> children = new HashSet<Role>();//子節(jié)點(diǎn)
//todo 省略get方法
public Role() {
super();
}
public Role(String nodeType,String visibleLevel, String name,
String resourceCodes,String comments, int orderNo) {
super();
this.nodeType = nodeType;
this.visibleLevel = visibleLevel;
this.name = name;
this.resourceCodes = resourceCodes;
this.comments = comments;
this.orderNo = orderNo;
}
//為跟節(jié)點(diǎn)構(gòu)造
private Role(AccessTokenUser user, Date operateTime, String name){
this.setCreateInfo(new OperateInfo(user));
this.id = getRoleRootId();
this.nodeType = NODETYPE_ROOT;
this.name = name;
this.orderNo = 1;
this.fullId = this.id+"-";
this.fullOrder = 1+"-";
}
//獲取角色跟節(jié)點(diǎn)id
@Transient
public static String getRoleRootId(){
return "rootRole";
}
//創(chuàng)建角色跟節(jié)點(diǎn)
public static Role createRoleRoot( AccessTokenUser user,Date operateTime){
Role root=new Role(user, operateTime, "角色管理");
return root;
}
public void updateCreateInfo(AccessTokenUser user,Date operateTime, Role parent) {
this.setCreateInfo(new OperateInfo(user));
this.parent = parent;
}
public void updateRole(AccessTokenUser user, Date operateTime,
Role parent,String name, String visibleLevel,
String resourceCodes,String comments, int orderNo) {
if(operateTime==null){
operateTime = new Date();
}
this.lastUpdateDate = operateTime;
this.name = name;
this.visibleLevel = visibleLevel;
this.parent = parent;
this.orderNo = orderNo;
this.resourceCodes = resourceCodes;
this.comments = comments;
}
//更新角色fullId和fullOrder
public void updateRoleFullIdAndFullOrder(AccessTokenUser user, Date operateTime,String oldFullId,String oldFullOrder) {
if(this.parent!=null){
this.fullId = this.parent.getFullId()+this.id+"-";
this.fullOrder = this.parent.getFullOrder()+Utils.lpadStr(this.orderNo+"",10,'0')+"-";
}else{
this.fullId = this.id+"-";
this.fullOrder = Utils.lpadStr(this.orderNo+"",10,'0')+"-";
}
//如果fullId或者fullOrder發(fā)生改變
if(!fullId.equals(oldFullId)||!fullOrder.equals(oldFullOrder)){
if(operateTime==null){
operateTime = new Date();
}
this.lastUpdateDate = operateTime;
}
}
}
@Entity
@Table(name = "T_USER_ROLE")
public class RoleUser extends ValueObjectEntity {
@Column(length=100)
private String roleId;//角色id
@Column(length=200)
private String roleName;//角色名稱
@Column(length=100)
private String userId;//用戶id
@Column(length=200)
private String userName;//用戶名稱
//todo 省略get方法
public RoleUser() {
super();
}
public RoleUser(String roleId, String roleName,
String userId,String userName) {
super();
this.roleId = roleId;
this.roleName = roleName;
this.userId = userId;
this.userName = userName;
}
//創(chuàng)建角色用戶關(guān)系
public void createRoleUser(AccessTokenUser user,Date operateTime) {
this.setCreateInfo(new OperateInfo(user));
this.id = this.userId+"_"+this.roleId;
}
}
數(shù)據(jù)庫表數(shù)據(jù)
系統(tǒng)顯示用戶擁有的菜單
定義接口
@ApiOperation(value="獲取框架菜單", httpMethod="GET")
@RequestMapping(value="/menus/get", method=RequestMethod.GET)
public ApiResultDTO<Map<String,List<MenuDTO>>> getHomePageMenus(@RequestParam(value = "fromType",required = false) String fromType, HttpServletRequest hreq,
HttpServletResponse hrep){
return RestAPITemplate.restapi(new IMyLogic<Map<String,List<MenuDTO>>>() {
@Override
public Map<String,List<MenuDTO>> logic() {
AccessTokenUser user = new AccessTokenUserAssembler().getAccessTokenUserFromReq(hreq);
return layoutService.getLayoutMenus(user,fromType);
}
});
}
Service服務(wù)+數(shù)據(jù)組裝
@Override
public Map<String,List<MenuDTO>> getLayoutMenus(AccessTokenUser user,String fromType) {
Map<String,List<MenuDTO>> result=new HashMap<String, List<MenuDTO>>();
PrivilegesUser puser = ThreadLocalCache.fetchAPIData(
"PrivilegesUser."+user.getUserId(),
new IDataFetch<ApiResultDTO<PrivilegesUser>>() {
@Override
public ApiResultDTO<PrivilegesUser> fetchData() {
return systGatewayService.getPrivilegesUserById(user.getUserId());
}
}
);
puser.getOtherData().put("accessToken", user.getAccessToken());
UserLayoutSetDTO layoutSet=this.getNotNullUserLayoutSet(user,fromType);
Map<String,List<MenuDTO>> allMenus=this.getMyAllMenus(user,fromType);
List<MenuDTO> leftTop = new ArrayList<MenuDTO>();//左菜單 上半部分
result.put("leftTop", leftTop);
List<WorkReminderDTO> gongztxq = layoutSet.getGongztxq();
for (int i = 0; i < gongztxq.size(); i++) {
for (MenuDTO menuDto : allMenus.get("gongztxq")) {
if(menuDto==null) continue;
if(menuDto.getId().equals(gongztxq.get(i).getMenuId()) && gongztxq.get(i).getShow()){
leftTop.add(menuDto);
break;
}
}
}
List<MenuDTO> leftBottom = new ArrayList<MenuDTO>();//左菜單 下半部分
result.put("leftBottom", leftBottom);
// Map<String,MenuDTO> changygnqMap=allMenus.get("changygnq").stream().collect(
// Collectors.toMap(d->d.getId(), d->d)
// );
if(layoutSet.getChangygnq() != null){
for (int i = 0; i < layoutSet.getChangygnq().size(); i++) {
for (MenuDTO menuDto : allMenus.get("changygnq")) {
if(menuDto==null) continue;
if(menuDto.getSubmenus().size() > 0){
for (MenuDTO submenu : menuDto.getSubmenus()) {
if(submenu.getId().equals(layoutSet.getChangygnq().get(i))){
leftBottom.add(submenu);
break;
}
}
}else{
if(menuDto.getId().equals(layoutSet.getChangygnq().get(i))){
leftBottom.add(menuDto);
}
}
}
}
}
if (leftTop.size()==0){
List<MenuDTO> leftBottom1 = result.get("leftBottom");
result.put("leftTop",leftBottom1);
result.put("leftBottom",new ArrayList<MenuDTO>());
}
return result;
}
public Map<String,List<MenuDTO>> getMyAllMenus(AccessTokenUser user,String fromType) {
List<MenuDTO> gongztxq = new ArrayList<>();//工作提醒區(qū)
String quyName="gongztxq";
result.put(quyName, gongztxq);
//待辦
if(puser.hasAppointPrefixResource((String)XysdSysConstants.RES_MODULE_SHOUY_DAIB_.getId())) {
gongztxq.add(new MenuDTO(quyName+"_daib", "待辦", "待辦", "/xf/waitTodo", "待處理工作,需及時(shí)處理"));
}
//提醒
if(puser.hasResource((String)XysdSysConstants.RES_MODULE_SHOUY_TIX.getId())) {
gongztxq.add(new MenuDTO(quyName+"_tix", "提醒", "提醒", "/xf/remind", "新件、催辦、退辦等提醒"));
}
//預(yù)警 海淀 HDXF-21069 增加 預(yù)警飄窗,去掉這個(gè) 工作人員app,公交集團(tuán) 還是需要
if (ValueObjectEntity.SYSCODE_GJJTXF.equals(BaseConstants.getProperty("syscode", null))
|| XysdConstants.TOKEN_FORMTYPE_APP.equals(user.obtainFromType())
||"gzapp".equals(fromType)){//處理PC登陸APP
if(puser.hasAppointPrefixResource((String)XysdSysConstants.RES_MODULE_SHOUY_YUJ_.getId())) {
gongztxq.add(new MenuDTO(quyName+"_yuj", "預(yù)警", "預(yù)警", "/xf/earlyWarn", "信訪三率預(yù)警"));
}
}
//監(jiān)控
if(puser.hasAppointPrefixResource((String)XysdSysConstants.RES_MODULE_SHOUY_JIANK_.getId())) {
gongztxq.add(new MenuDTO(quyName+"_jiank", "監(jiān)控", "監(jiān)控", "/xf/monitor", "未結(jié)件跟進(jìn)辦理"));
}
//看板
if(puser.hasResource((String)XysdSysConstants.RES_MODULE_SHOUY_KANB.getId())) {
gongztxq.add(new MenuDTO(quyName+"_kanb", "看板", "看板", "/xf/bulletinBoard", "全區(qū)信訪統(tǒng)計(jì)分析"));
}
//數(shù)據(jù)分析
if(puser.hasResource((String)XysdSysConstants.RES_MODULE_SHOUY_SHUJFX.getId())) {
gongztxq.add(new MenuDTO(quyName+"_shujfx", "數(shù)據(jù)分析", "數(shù)據(jù)分析", "/xf/dataAnalysis", "數(shù)據(jù)分析"));
}
List<MenuDTO> defaultChangygnq = new ArrayList<MenuDTO>();//默認(rèn)常用功能區(qū)
List<MenuDTO> changygnq = new ArrayList<MenuDTO>();//常用功能區(qū)
quyName="changygnq";
result.put(quyName, changygnq);
result.put("defaultChangygnq", defaultChangygnq);
//查詢統(tǒng)計(jì)
menuDTO = new MenuDTO(quyName+"_chaxtj", "查詢統(tǒng)計(jì)", "查詢統(tǒng)計(jì)");
//查詢統(tǒng)計(jì)-查詢
if(puser.hasAppointPrefixResource(XysdSysConstants.RESPREFIX_MODULE_XINF_CHAX_)) {
MenuDTO cxMuDTO = new MenuDTO(quyName+"_chaxtj_xinfcx", "查詢", "查詢", "/xf/query", "辦理查詢");
menuDTO.getSubmenus().add(cxMuDTO);
defaultChangygnq.add(cxMuDTO);
}
//查詢統(tǒng)計(jì)-統(tǒng)計(jì)
if(puser.hasAppointPrefixResource(XysdSysConstants.RESPREFIX_MODULE_TONGJBB_)) {
MenuDTO tjMuDTO = new MenuDTO(quyName+"_chaxtj_tongj", "統(tǒng)計(jì)", "統(tǒng)計(jì)", "/xf/statistics", "統(tǒng)計(jì)中心,進(jìn)行各類統(tǒng)計(jì)");
menuDTO.getSubmenus().add(tjMuDTO);
defaultChangygnq.add(tjMuDTO);
}
//信訪庫
menuDTO = new MenuDTO(quyName+"_xinfk", "信訪庫", "信訪庫");
//信訪庫-查詢
if(puser.hasAppointPrefixResource(XysdSysConstants.RESPREFIX_MODULE_XINFK_CHAX_)) {
menuDTO.getSubmenus().add(new MenuDTO(quyName+"_xinfk_chax", "信訪庫", "信訪庫", "/xf/infoLibrary", "信訪人、信訪件等集中查詢"));
}
//信訪庫-整理
if(puser.hasAppointPrefixResource(XysdSysConstants.RESPREFIX_MODULE_XINFK_ZHENGL_)) {
menuDTO.getSubmenus().add(new MenuDTO(quyName+"_xinfk_zhengl", "信訪庫整理", "信訪庫整理", "/xf/infoArrange", "信訪庫整理"));
}
if(menuDTO.isHasSubMenus()) {
changygnq.add(menuDTO);
}
return result;
}
返回值
文章來源:http://www.zghlxwxcb.cn/news/detail-821283.html
效果圖
請(qǐng)看最上面文章來源地址http://www.zghlxwxcb.cn/news/detail-821283.html
到了這里,關(guān)于用戶資源(菜單)控制學(xué)習(xí)使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!