1. 程式人生 > >基於springboot+redis+bootstrap+mysql開發一套屬於自己的分散式springcloud雲許可權架構(十一)【許可權架構生產者(組織架構)】

基於springboot+redis+bootstrap+mysql開發一套屬於自己的分散式springcloud雲許可權架構(十一)【許可權架構生產者(組織架構)】

      在第十章我們完成了對使用者管理的整合,本章我們將完成對組織架構管理的整合開發工作,首先開啟我們的rbac-produce工程,接著在com/produce/sys/dao目錄底下建立一個UserDao.java介面內容如下:

package com.produce.sys.dao;


import com.base.entity.OrgGroup;
import com.base.entity.QueryOrgGroup;
import com.produce.common.base.dao.GenericDao;

/**
 *@author linzf
 **/
public interface OrgGroupDao extends GenericDao<OrgGroup, QueryOrgGroup> {

    /**
     * 功能描述:根據父節點來查詢最大的節點的值
     * @param parentNode
     * @return
     */
    String getMaxOrgGroup(String parentNode);

    /**
     * 功能描述:根據選單節點NODE來查詢節點資料
     * @param node
     * @return
     */
    OrgGroup findByNode(String node);
}

接著在我們的mapper資料夾底下建立一個mybatis_orgGroup.xml檔案,檔案內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.produce.sys.dao.OrgGroupDao">
	<resultMap type="com.base.entity.OrgGroup" id="OrgGroupMap">
		<id property="groupId" column="group_id"/>
		<result property="existingNum" column="existing_num"/>
		<result property="groupCode" column="group_code"/>
		<result property="name" column="name"/>
		<result property="node" column="node"/>
		<result property="num" column="num"/>
		<result property="parentNode" column="parent_node"/>
	</resultMap>

	<!-- 根據父節點來查詢最大的節點的值 -->
	<select id="getMaxOrgGroup" parameterType="java.lang.String" resultType="java.lang.String">
		select max(o.node) from org_group o where o.parent_node = #{parentNode}
	</select>

	<!-- 根據選單節點NODE來查詢節點資料 -->
	<select id="findByNode" parameterType="java.lang.String" resultMap="OrgGroupMap">
			select * from org_group where node = #{node}
	</select>

	<!--根據主鍵獲取物件-->
	<select id="get" parameterType="com.base.entity.OrgGroup" resultMap="OrgGroupMap">
		SELECT group_id,existing_num,group_code,name,node,num,parent_node FROM org_group 
		WHERE group_id=#{groupId}
	</select>

	<!--儲存-->
	<insert id="save" parameterType="com.base.entity.OrgGroup" useGeneratedKeys="true" keyProperty="groupId">
		INSERT INTO org_group(existing_num,group_code,name,node,num,parent_node)
		VALUES(#{existingNum},#{groupCode},#{name},#{node},#{num},#{parentNode})
	</insert>

	<!--修改-->
	<update id="update" parameterType="com.base.entity.OrgGroup">
		UPDATE org_group SET group_code=#{groupCode},name=#{name},node=#{node},num=#{num},parent_node=#{parentNode}
		WHERE group_id=#{groupId}
	</update>

	<!--刪除-->
	<delete id="delete" parameterType="com.base.entity.OrgGroup">
		 DELETE FROM org_group WHERE group_id=#{groupId}
	</delete>

	<!--分頁查詢-->
	<select id="findByPage" parameterType="com.base.entity.QueryOrgGroup" resultMap="OrgGroupMap">
		SELECT group_id,existing_num,group_code,name,node,num,parent_node FROM org_group
		WHERE 1=1
		<if test="existingNum!=null and existingNum!='' "  >
		AND existing_num=#{existingNum}
		</if>
		<if test="groupCode!=null and groupCode!='' "  >
		AND group_code=#{groupCode}
		</if>
		<if test="name!=null and name!='' "  >
		AND name=#{name}
		</if>
		<if test="node!=null and node!='' "  >
		AND node=#{node}
		</if>
		<if test="num!=null and num!='' "  >
		AND num=#{num}
		</if>
		<if test="parentNode!=null and parentNode!='' "  >
		AND parent_node=#{parentNode}
		</if>
		<if test="sort!= null">
		order by ${sort} ${order}
		</if>
		limit #{offset},#{limit}
	</select>

	<!--統計-->
	<select id="count" parameterType="com.base.entity.QueryOrgGroup" resultType="int">
		SELECT count(*) FROM org_group
		WHERE 1=1
		<if test="existingNum!=null and existingNum!='' ">
		AND existing_num=#{existingNum}
		</if>
		<if test="groupCode!=null and groupCode!='' ">
		AND group_code=#{groupCode}
		</if>
		<if test="name!=null and name!='' ">
		AND name=#{name}
		</if>
		<if test="node!=null and node!='' ">
		AND node=#{node}
		</if>
		<if test="num!=null and num!='' ">
		AND num=#{num}
		</if>
		<if test="parentNode!=null and parentNode!='' ">
		AND parent_node=#{parentNode}
		</if>
	</select>

	<!--查詢-->
	<select id="query" parameterType="com.base.entity.QueryOrgGroup" resultMap="OrgGroupMap">
		SELECT group_id,existing_num,group_code,name,node,num,parent_node FROM org_group
		WHERE 1=1
		<if test="existingNum!=null and existingNum!='' ">
		AND existing_num=#{existingNum}
		</if>
		<if test="groupCode!=null and groupCode!='' ">
		AND group_code=#{groupCode}
		</if>
		<if test="name!=null and name!='' ">
		AND name=#{name}
		</if>
		<if test="node!=null and node!='' ">
		AND node=#{node}
		</if>
		<if test="num!=null and num!='' ">
		AND num=#{num}
		</if>
		<if test="parentNode!=null and parentNode!='' ">
		AND parent_node=#{parentNode}
		</if>
		<if test="sort!= null">
		order by ${sort} ${order}
		</if>
	</select>
</mapper>

接著在com/produce/sys/service目錄底下建立一個OrgGroupService.java實現類內容如下:

package com.produce.sys.service;


import com.base.entity.OrgGroup;
import com.base.entity.QueryOrgGroup;
import com.produce.common.base.dao.GenericDao;
import com.produce.common.base.service.GenericService;
import com.produce.sys.dao.OrgGroupDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 *@author linzf
 **/
@Service("orgGroupService")
@Transactional(rollbackFor={IllegalArgumentException.class})
public class OrgGroupService extends GenericService<OrgGroup, QueryOrgGroup> {
	@Autowired
	@SuppressWarnings("SpringJavaAutowiringInspection")
	private OrgGroupDao orgGroupDao;
	@Override
	protected GenericDao<OrgGroup, QueryOrgGroup> getDao() {
		return orgGroupDao;
	}

	/**
	 * 功能描述:根據父節點來查詢最大的節點的值
	 * @param parentNode
	 * @return
	 */
	public String getMaxOrgGroup(String parentNode){
		return orgGroupDao.getMaxOrgGroup(parentNode);
	}

	/**
	 * 功能描述:根據選單節點NODE來查詢節點資料
	 * @param node
	 * @return
	 */
	public OrgGroup findByNode(String node){
		return orgGroupDao.findByNode(node);
	}
}

最後在我們的com/produce/sys/controller底下建立我們的UserController.java實現類內容如下:

package com.produce.sys.controller;

import com.base.common.Page;
import com.base.entity.OrgGroup;
import com.base.entity.QueryOrgGroup;
import com.base.entity.QueryUser;
import com.produce.common.base.constant.SystemStaticConst;
import com.produce.common.base.controller.GenericController;
import com.produce.common.base.service.GenericService;
import com.produce.sys.service.OrgGroupService;
import com.produce.sys.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/*
* 類描述:
* @auther linzf
* @create 2018/2/6 0006 
*/
@RestController
@RequestMapping("/group")
public class OrgGroupController extends GenericController<OrgGroup, QueryOrgGroup> {

    @Autowired
    private OrgGroupService orgGroupService;
    @Autowired
    private UserService userService;

    @Override
    protected GenericService<OrgGroup, QueryOrgGroup> getService() {
        return orgGroupService;
    }

    @Override
    public Map<String, Object> get(@RequestBody OrgGroup entity) throws Exception {
        Map<String,Object> result = new HashMap<String, Object>();
        entity = orgGroupService.get(entity);
        if(entity==null){
            result.put(SystemStaticConst.RESULT, SystemStaticConst.FAIL);
            result.put(SystemStaticConst.MSG,"獲取資料失敗!");
        }else{
            result.put(SystemStaticConst.RESULT, SystemStaticConst.SUCCESS);
            result.put(SystemStaticConst.MSG,"獲取資料成功!");
            entity.setOrgGroup(orgGroupService.findByNode(entity.getParentNode()));
            result.put("entity",entity);
        }
        return result;
    }

    @Override
    public Map<String, Object> update(@RequestBody OrgGroup entity) throws Exception {
        Map<String,Object> result = new HashMap<String, Object>();
        OrgGroup update = new OrgGroup();
        update.setGroupId(entity.getGroupId());
        update = orgGroupService.get(update);
        update.setName(entity.getName());
        update.setGroupCode(entity.getGroupCode());
        update.setNum(entity.getNum());
        boolean success = orgGroupService.update(update);
        if(success){
            result.put(SystemStaticConst.RESULT, SystemStaticConst.SUCCESS);
            result.put(SystemStaticConst.MSG,"修改資料成功!");
            result.put("entity",entity);
        }else{
            result.put(SystemStaticConst.RESULT, SystemStaticConst.FAIL);
            result.put(SystemStaticConst.MSG,"修改資料失敗!");
        }
        return result;
    }

    /**
     * 功能描述:獲取組織架構底下的相應的使用者
     * @return
     */
    @RequestMapping(value = "/userList",method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
    public Map<String,Object> userList(@RequestBody QueryUser user){
        Map<String,Object> result = new HashMap<String, Object>();
        Page page = userService.findByGroupUserPage(user);
        result.put("totalCount",page.getTotal());
        result.put("result",page.getRows());
        return result;
    }

    /**
     * 功能描述:獲取組織架構的整顆選單樹
     * @return
     */
    @RequestMapping(value = "/loadGroupTree",method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
    public Map<String,Object> loadGroupTree(){
        Map<String,Object> result = new HashMap<String, Object>();
        List<OrgGroup> orgGroupList = orgGroupService.query(null);
        result.put(SystemStaticConst.RESULT, SystemStaticConst.SUCCESS);
        result.put(SystemStaticConst.MSG,"載入組織機構資料成功!");
        result.put("data",orgGroupList);
        return result;
    }

    @Override
    public Map<String, Object> save(@RequestBody OrgGroup entity) throws Exception  {
        String max_node = getMaxNode(orgGroupService.getMaxOrgGroup(entity.getOrgGroup().getNode()),entity.getOrgGroup().getNode());
        entity.setParentNode(entity.getOrgGroup().getNode());
        entity.setNode(max_node);
        return super.save(entity);
    }


    private String getMaxNode(String node,String parentNode){
        String max_node = "";
        if(node==null){
            max_node = parentNode + "001";
        }else{
            String n = (Integer.parseInt(node.substring(node.length()-3)) + 1) + "";
            switch(n.length()){
                case 1:
                    max_node = parentNode + "00" + n;
                    break;
                case 2:
                    max_node = parentNode + "0" + n;
                    break;
                case 3:
                    max_node = parentNode + "" + n;
                    break;
            }
        }
        return max_node;
    }



}

到此處我們完成了對使用者管理的整合,接著啟動我們的註冊中心,鏈路中心同時啟動我們的rbac-produce,接著直接訪問我們的swagger工程地址:http://127.0.0.1:8100/swagger-ui.html#/,那麼我們會看到如下的頁面則表示我們的角色管理已經整合成功了。



QQ交流群:578746866


相關推薦

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構許可權架構消費者完整實現

      在第十四章我們已經完成了通用業務類的編寫,因此本章我們將講解如何完整的實現我們的許可權架構的消費者的實現,首先開啟我們的rbac-consumer工程,接著開啟我們的主入口檔案RbacConsumerApplication.java加入@EnableDiscove

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構許可權架構生產者組織架構

      在第十章我們完成了對使用者管理的整合,本章我們將完成對組織架構管理的整合開發工作,首先開啟我們的rbac-produce工程,接著在com/produce/sys/dao目錄底下建立一個UserDao.java介面內容如下:package com.produce.

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構路由閘道器

      在前面十六章我們完成了註冊中心、鏈路中心、許可權架構生產者、許可權架構消費者的整合開發工作,本章將開始重點講解我們的路由閘道器的實現,由於我們的微服務內部是無許可權的,因此我們的微服務內部是不對外暴露埠的,所有的請求全部通過路由閘道器來進行請求的,因此在本章我們的

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構許可權架構消費者通用類編寫

       許可權架構的消費者和許可權架構的生產者一樣可以高度抽象化我們的通用接口出來,因此本章我們將這些消費者介面高度抽象出來,理論上這些高度抽象出來的介面是可以作為一個獨立的module需要的時候使用maven引入,不過此處就不再解耦出來,而是直接寫在我們的許可權架構服

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構許可權架構生產者角色管理

      在第七章我們完成了對資料字典的整合,本章我們將完成角色管理的整合工作,首先開啟我們的rbac-produce工程,接著在com/produce/sys/dao目錄底下建立一個UserRoleDao.java介面內容如下:package com.produce.sy

設計和開發簡單自己主動化UI框架

depth 定義 其它 而是 例如 選擇 span debug etl !有興趣的朋友請直接移步Github,本帖子已經不做更新,框架的詳細的實現已經做了優化和代碼整理,本文僅僅介紹了詳細的設計思路! 目標:編寫一個簡單通用UI框架用於管理頁面和完

xlauch 1.0 基於springboot + mybatis + beetls 快速開發腳手架

springboot xlauch java beetl mybatis xlauch xlauch 是基於springboot + mybatis + beetls 快速開發腳手架, 包含了用戶管理,組織機構管理,角色管理,功能點管理,菜單管理,權限分配,數據權限分配,代碼生成,二次開

JMeter4.0學習之JMeter對Mysql、Oracle數據庫性能測試腳本開發

conn 遇到的問題 mys .cn SQ 數據庫性能測試 pos rac 問題總結 一、MySQL數據庫鏈接: 註:下面所產生的問題一律參考詳見:《【JMeter4.0】之遇到的問題總結(持續更新)》(包括Mysql、Orcale) 準備:引包,包路徑一定要放對位置,

SSM+Redis+Bootstrap-fileinput開發圖片上傳程式

一、背景 由於最近作業要寫一個JSP+Servlet的圖片上傳程式。再加上最近在學Spring,在寫這個作業的時候想到很多的騷操作。想也沒想就搞上了。廢話不多說,接下來開始介紹這個程式。本程式已經上傳到Github,文章連結附加在文章末尾。 二、技術棧 後端:Sprin

基於Vue.js+Koa+MySQL開發的個人部落格

我的部落格 一直以來都想自己做一些個人專案, 於是想到了先做一個部落格專案練練手。在GitHub上找了很多大神的開源部落格專案來學習,慢慢的自己也完成了一個簡單版本的部落格,並部署上線。 目前專案已經全部部署到伺服器,但域名還在備案,因此只能先通過IP地址訪問。 線上地址 前

基於SpringBoot+Redis的Session共享與單點登入

title: 基於SpringBoot+Redis的Session共享與單點登入 date: 2019-07-23 02:55:52 categories: 架構 author: mrzhou tags: SpringBoot redis session 單點登入 基於SpringBoot+Redis的

SpringBoot-- 動態數據源

eterm 屬性 this runt ids 指定 之前 exception factory SpringBoot中使用動態數據源可以實現分布式中的分庫技術,比如查詢用戶 就在用戶庫中查詢,查詢訂單 就在訂單庫中查詢。 一、配置文件application.properti

CoreThink開發首頁控制器判斷移動設備還是PC並做相應處理

iss htm meizu http nec window sam assign clas 在home模塊Index控制器添加判斷代碼 application\Home\Controller\IndexController.class.php <?php // +

Salesforce 開發整理 自定義放大鏡查找效果

!= empty ole str 技術分享 ring sql value idp 有時候在自定義的visualforce頁面上,需要實現系統標準的查找樣式,當不能使用標準的style的時候,我們只能選擇自定義實現,下面分享一個demo,預覽效果如下: 實現代碼,Visua

主機管理+堡壘機系統開發:批量任務開發思路

erb value transfer led 不能 objects 記錄表 inf control 一、批量任務開發思路 1、開發目標 2、開發思路 1、前端提交發起請求100臺機器,那我要等待5分鐘, 問題就在於,這100臺不是同時執行完的,有可能我有10臺執行完了,執

MySQL數據庫8表關系

常用 nbsp width 其他 就會 學生 p s 查詢 帶來 表關系 表關系:表與表之間(實體)有什麽樣的關系,每種關系應該如何設計表結構。 一對一 一對一,一張表中的一條記錄與另外一張表中最多有一條明確的關系,通常,此設計方案保證兩張表中使用同樣的主鍵即可。(唯一

企業級 SpringBoot 教程 springboot集成swagger2,構建優雅的Restful API

group require pip 掃描 pan itl 信息 elm 框架 swagger,中文“拽”的意思。它是一個功能強大的api框架,它的集成非常簡單,不僅提供了在線文檔的查閱,而且還提供了在線文檔的測試。另外swagger很容易構建restful風格的api,簡單

SpringBoot導出excel文件

array try swagger sta 關閉 index pat request rri 一:添加POI依賴 <dependency> <groupId>org.apache.poi</groupId> <arti

Go語言開發、Go語言常用標準庫

lena unix doc 計算 cmd.run ner rem 信息 前綴 Go語言開發(十一)、Go語言常用標準庫一 一、log 1、log模塊簡介 Go語言中log模塊用於在程序中輸出日誌。log模塊提供了三類日誌輸出接口,Print、Fatal和Panic。Prin

SpringBoot從入門到放棄》之第篇——使用@Scheduled建立定時任務,cron七子表示式的簡單使用

模擬場景:有時候,你需要每天某個點或者每週、每個月讓程式做一些事情,如呼叫介面獲取資料,比如生成資料的報表,或者統計一些資料之類,你除了可以在資料庫建立儲存過程,還可以寫Java定時任務。 O的K,接著上一篇的開發環境。《SpringBoot從入門到放棄》之第(十)篇 我們建立一個定時任