RPMS_4s汽车维修管理

Saas

什么是Saas

SaaS是Software-as-a-service(软件即服务)。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统

在这里插入图片描述

Saas模式:

在这里插入图片描述

Saas 模式下面的数据安全问题

​ 方案一: 可一个租户都单独的数据库 – 安全性最高

在这里插入图片描述

方案二: 共享数据库 ,独立schema(oracle比较明显)(用户 方案 – 表)
在这里插入图片描述

方案三: 共享数据库 ,共享表 . – 目前

在这里插入图片描述

saas的权限设计

以前权限设计的模式:

在这里插入图片描述

Saas(平台) 怎么设计权限 ?

在这里插入图片描述

1.4 租户注册–流程

在这里插入图片描述

实现注册流程

学会: (1)怎么去保存 多张表

​ t_tenant /t_employee

​ (2)怎么处理 对象里面 有关联对象

​ employee (tenant)

前台封装参数值:

let para = Object.assign({
   }, this.employee);
let tenant = {
   
    companyName: para.companyName,
    companyNum:para.companyNum,
    address:para.address,
    logo:para.logo
}
para.tenant = tenant;

后台通过Employee对象接收

分页

(1) 创建PageList

​ pageSize page total rows

(2) 创建BaseQuery对象 – >接收到前台传过来的值

(3)在对应的service成添加了分页的方法

public PageList<Department> findPage(DepartmentQuery departmentQuery) {
   

        PageList<Department> pageList = new PageList();
        //查询总数 select count(*) from xxx where xxxx
        Long total = departmentMapper.findTotal(departmentQuery);
        //总的条数
        pageList.setTotal(total);
        // select *from xx  where limit  0, 10
       List<Department> departments = departmentMapper.findData(departmentQuery);
        //当前页的数据
        pageList.setRows(departments);
        return pageList;
    }

高级查询

 <!-- 分页查询总数据的方法 findTatal(DepartmentQuery query)-->
    <select id="findTotal" parameterType="departmentQuery" resultType="long">
        select count(*) from t_department
        <where>
            <if test="name != null and name != ''">
               and name like concat('%',#{name},'%')
            </if>
        </where>

    </select>
    <!--limit 0,10  10,10-->
    <select id="findData" parameterType="departmentQuery" resultType="Department">
         select * from  t_department
        <where>
            <if test="name != null and name != ''">
                and name like concat('%',#{name},'%')
            </if>
        </where>
         limit #{start},#{pageSize}
    </select>

mybatis关系处理

jpa /mybatis

一对一 多对一 – >1方处理

一对多 多对多 --> 多方处理

查询操作

对1方(1对1 多对1)

 <resultMap id="DepartmentMap" type="department">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <result column="sn" property="sn"></result>
        <!--对一方处理-->
        <association property="manage" javaType="employee">
            <id column="eid" property="id"></id>
            <result column="username" property="username"></result>
        </association>
        <association property="parent" javaType="department">
            <id column="pid" property="id"></id>
            <result column="pname" property="name"></result>
        </association>
        <association property="tenant" javaType="tenant">
            <id column="tid" property="id"></id>
            <result column="companyName" property="companyName"></result>
        </association>

    </resultMap>
    <!--limit 0,10  10,10-->
    <select id="findData" parameterType="departmentQuery" resultMap="DepartmentMap">
        select d.id , d.name , d.sn , e.id eid,e.username , p.id pid, p.name pname
        ,t.id tid, t.companyName
        from  t_department  d
        join t_employee e on d.manager_id = e.id
        join t_department p on d.parent_id = p.id
        join t_tenant t on d.tenant_id = t.id
        <where>
            <if test="name != null and name != ''">
                and name like concat('%',#{name},'%')
            </if>
        </where>
         limit #{start},#{pageSize}
    </select>

对多(1对多 多对多)

<!-- 查询子部门处理多方-->
    <select id="loadChildrenDept" resultMap="childrenDeptMap">
        select distinct d.id,d.name ,p.id pid ,p.name pname from t_department d
          join t_department p  on d.parent_id = p.id
          order by p.id
    </select>
    <resultMap id="childrenDeptMap" type="department">
        <id column="pid" property="id"></id>
        <result column="pname" property="name"></result>
        <collection property="childrens" javaType="department">
            <id column="id" property="id"></id>
            <result column="name" property="name"></result>
        </collection>
    </resultMap>

多对多注意:

​ 在分页的时候,不要嵌套结果 要使用嵌套查询

增(修改) 删除

(1)对1方处理 (1对1 多对1)-- 增加/修改

多个员工对应1个部门 – >

Emloyee:

​ usename, pwd,Department dept;

新增/修改

insert into t_employee (username,pwd,dept_id) values(#{username},#{pwd},#{dept.id})

update t_employee set username = #{username},dept_id=#{dept.id} where id=#{id}

insert into t_department(name,manage_id) values(#{name},#{manage.id})

(2)对多方处理(1对多/多对多)–保存修改

升级elementui版本:

​ 修改 package.json

  "element-ui": "^2.12.0",

修改main.js 的index.css文件

  import 'element-ui/lib/theme-chalk/index.css'

对话框:

修改 dialog 添加属性:
:visible.sync="addFormVisible"
穿梭框
		<el-form-item label="权限" prop="permissions">
					<el-transfer v-model="selectedPermissions" :data="allPermissions" :titles="titles"   :props="{
						key: 'id',
						label: 'name'
					  }"  @change="handleChange">
					</el-transfer>
				</el-form-item>
				
				

				 selectedPermissions:[],
                allPermissions:[{
   "id":1,"name":"添加员工"},{
   "id":2,"name":"修改员工"},{
   "id":3,"name":"删除员工"}],
                titles:['所有权限', '已选权限'],
                    
                   -----------------传值的时候,封装的参数-------------------------------- 
                      let paraselectPermsion = Object.assign({
   },this.selectedPermissions);
                            para.permissions = [];
                            for(let key in paraselectPermsion ){
   
                                let permission ={
   
                                    "id": paraselectPermsion[key]
                                }
                                para.permissions.push(permission);
                            }

接收保存
 public void saveRolePermisison(Role role){
   
        //保存角色t_role
        roleMapper.save(role);
        // 方案一 : 多次操作数据库

        //方案二: 批量新增 insert into  t_role_permission(role_id,permission_id) values(1,1),(1,2)
        // insert into
        //  t_role_permission(role_id,permission_id) values(1,100),(1,201)
        List<Map<String,Object>> rplist = new ArrayList();
        List<Permission> permissions = role.getPermissions();
        for (Permission permission : permissions) {
   
            Long pid = permission.getId();
            Long rid = role.getId();
            Map rpMap = new HashMap();
            rpMap.put("roleId",rid);
            rpMap.put("permissionId",pid);
            rplist.add(rpMap);
        }

        roleMapper.saveRolePermission(rplist);


    }

 <insert id="saveRolePermission" parameterType="arrayList">
        insert into t_role_permission(role_id,permission_id) VALUES
        <foreach collection="list" item="item" separator=",">
            (#{item.roleId},#{item.permissionId})
        </foreach>
    </insert>

常用组件

(1)下拉组件

	<el-form-item label="部门经理" prop="username">
					<el-select v-model="managerId" placeholder="请选择">
						<el-option
								v-for="item in managers"
								:key="item.id"
								:label="item.username"
								:value="item.id">
						</el-option>
					</el-select>
				</el-form-item>

(2)穿梭框

	<el-form-item label="权限" prop="permissions">
					<el-transfer v-model="selectedPermissions" :data="allPermissions" :titles="titles"   :props="{
						key: 'id',
						label: 'name'
					  }"  @change="handleChange">
					</el-transfer>
				</el-form-item>

(3)上传

<el-upload
           class="upload-demo"
           action="http://localhost/file/upload"
           :on-success="handleSuccess"
           :file-list="fileList"
           list-type="picture">
    <el-button size="small" type="primary">点击上传</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>

百度地图–看官网

地图 在很多场景下面都在使用

地图有很多种类 – 百度地图 / 高德 /腾讯/谷歌

(1)百度平台得的key=123123123123123123123

百度地图

(2)怎么使用

​ a) 安装 vue-baidu-map

​ npm install vue-baidu-map --save

​ b) 全局引入百度地图 --main.js

import Vue from 'vue'
import BaiduMap from 'vue-baidu-map'

Vue.use(BaiduMap,{
   
  // ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */
  ak: 'Hfr6TfnXRMrg1Df5P2VjwORlDrR8BvTR'
})

c)测试

<!-- 准备一个对话框-->
	<el-dialog title="百度地图" width="60%"   :visible.sync="mapDialogVisibale" v-model="mapDialogVisibale" :close-on-click-modal="false">
		<baidu-map center="成都市" :zoom="11">
			<bm-auto-complete v-model="keyword" :sugStyle="{
      zIndex: 2100}">
				<div style="margin-bottom:10px">
					<input  id="searchInput" type="text" placeholder="请输入关键字" class="searchinput"/>
					<el-button type="success" @click="selectAdrressConfirm">确定</el-button>
				</div>
			</bm-auto-complete>
			<bm-view class="bmap"/>
			<bm-local-search :keyword="keyword" :auto-viewport="true" :panel="false"></bm-local-search>
		</baidu-map>
	</el-dialog>

​ # 1. 登录(掌握)

shiro: 安全框架,四大基石(身份认证 授权 密码学 会话管理)

项目里面怎么添加shiro

(1)创建一个shiro的maven模块

(2)导入jar包

<dependencies>  
		<dependency>
            <groupId>cn.itsource</groupId>
            <artifactId>crm_service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值