ihrm项目结构详解

大体介绍

在这里插入图片描述

云服务的三种模式

Iaas:基础设施即服务
Pass:平台即服务
Saas:软件即服务

系统设计

在这里插入图片描述
在这里插入图片描述
主键id生成策略
在这里插入图片描述
lombok
@data = @setter + @getter +@noArgs(无参构造)

模块搭建

1 企业得增删改查
2 全局异常处理器
3 跨域@Crosorigin注解

1 多租户的数据库设计

多租户的数据隔离
方案一:多个数据库
方案二:一个数据库多个schema
在这里插入图片描述
方案三: 共享数据库共享数据库表,通过企业id进行数据隔离

数据库得三大范式

1 保证每列的原子性(每一列不可拆分)(eg:address:中国北京,可以拆分为国籍和城市,这样就是不可拆分了)
2 第二范式:在第一范式的基础上,非主属性必须依赖主属性(一个表只做一个事情 eg:用户表里面有 语文成绩,数学成绩,这些成绩可以放到成绩表中)
3 第三范式:在第二范式的基础上,消除传递依赖(eg:订单表中 有单价和数量,多了一个字段总价:这个总价是可以通过数量乘以单价得到的,)

反三范式

通过添加一些冗余字段方便查询效率
eg:总价,这个字段虽然冗余了,但是页面中确实是要显示的

node8一般已经集成了npm
cnpm install //国内镜像
npm install //国外镜像
npm run dev

前端工程目录

build 编译的内容
config 全局变量
node_moudles 依赖的组件执行npm install下载下来的
script 一些脚本
src 所有的源码

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

图片上传

员工管理的头像图片

刷脸登录(百度云AI)

1 人脸注册
向百度的人脸库注册(添加)用户的人脸照片(addUser)
2 人脸检测
判断图片中是否有面部信息
3 人脸搜索
根据用户上传的图片和指定人脸库中所有人脸进行比较,获取相似度最高的一个或者几个的评分,score:相似度评分最高的
返回值:数据只要一条,相似度最高的(百度云推荐80分以上就是认为是同一个人)
4 人脸更新
更新人脸库中的照片(updateUser)

刷脸登录实现

在这里插入图片描述
在这里插入图片描述

工作流介绍

工作流:就是工作流程的计算模型,一套规则,让程序按照一定的规则继续执行下去
工作流引擎:activiti
activiti开发流程介绍
一 静态阶段
1.1 流程设计–模型(xml)
1.2流程部署–将模型xml上传到系统中,导入到activiti
二 运行时阶段
2.1 用户发起流程
2.2 用户审批流程(驳回)
使用activiti进行流程状态的跟踪
三 历史阶段
历史的流程查询
在这里插入图片描述
在项目中使用activiti进行流程控制 一般而言可以分为三步
1 流程制作(工具绘制流程图,部署到activiti中)
2 流程执行:工作流已进入“运行中”阶段
3 查询历史阶段
eg:请假流程
在这里插入图片描述

在这里插入图片描述
流程制作工具
在这里插入图片描述

官网下载activiti-app 包,放到tomcat中运行,启动即可
绘制模型

在这里插入图片描述

每一个节点定义了一个id 一个候选组(什么样的人或者身份,可以有当前节点的权限)
选择网关:定义一个条件,根据条件进入到不同的节点
流程绘制完成保存后,其实时一个xml文件

流程设计好后,通过文件上传的形式,部署到activiti流程引擎中
activiti和业务数据库多数据源配置
1 流程的部署
通过repositoryService进行流程的部署(springboot项目集成了activiti工作流引擎),这个repositoryService 是activiti暴漏的,给我们提供好的供我们使用的

javaDeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
        deploymentBuilder.addBytes(fileName , file.getBytes());   //部署流程
        deploymentBuilder.tenantId(companyId);
        Deployment deploy = deploymentBuilder.deploy();```

上传成功后对应activiti数据中的表act_re_devlopment(还有一些关联的表eg:act_re_procdef(流程定义的一些配置信息) act_re_bytearry(存放的是流程定义的xml文件)) 会多出数据

2 流程定义的管理(流程挂起,激活,查询等)
通过activiti内置的api

return repositoryService.createProcessDefinitionQuery()
                .processDefinitionTenantId(companyId).latestVersion().list();

3 流程的挂机和激活

       ProcessDefinition definition =
                repositoryService.createProcessDefinitionQuery()
                        .processDefinitionKey(processKey).latestVersion().singleResult();
        if(definition.isSuspended()) { //如果是挂起状态,这里激活此流程
            repositoryService.activateProcessDefinitionById(definition.getId());
        }else{
//如果不是挂起状态,这里挂起此流程
            repositoryService.suspendProcessDefinitionById(definition.getId());
        }

在这里插入图片描述
业务数据库
proc_instance表 发起得流程得对应流程得实例(一个流程),proc_state(流程得状态)

在这里插入图片描述

proc_task_instance //业务流程得任务表,(每个节点) 一个流程对应多个节点
在这里插入图片描述

proc_user_group //用户组表
在这里插入图片描述

在这里插入图片描述
每个任务节点都有一个候选组

在这里插入图片描述
通过候选组,对应得sql查询对应得用户
activiti表和业务表是绑定关系得

查询申请的流程
在这里插入图片描述
发起申请
在这里插入图片描述
springdata-jpa当中
要想手动执行sql 注入@entitymanager

在这里插入图片描述

在这里插入图片描述

发起流程
用户前端选择请假(加班等)原因,时间,理由等信息,发起流程申请,后端获取到用户id 远程调用用户服务查询用户信息,封装数据 到流程实体类中

1 部署流程
通过activiti-app绘制好流程图,以文件得形式上传到activiti服务器中,并绑定业务表中的companyID(企业id),teantId
2 流程的激活和挂起
通过activiti对外提供的service(repositoryService)active方法进行激活和挂起

3 流程的发起
3.1 用户通过页面填写请假等相关信息(天数,原因),后端获取相关信息,获取用户id的同时远程调用用户微服务获取完整的用户信息(这里主要获取用户的部门id),根据process_key(流程实例名称) 和companyId 获取到对应的activiti中的流程对象,开启流程
3.2 自动执行下一个任务节点 开启,在获取下一个节点的数据,查询当前节点的审批人,根据当前节点的id查询当前任务节点的候选组,根据候选组id查询系统业务中的用户组表,封装参数,手动执行(jpa中采用的是entityManager)sql,结果集就是该任务节点审核的所有人
填充业务数据中的当前节点审批人,保存到数据库,其中流程表和任务节点表是1对多的关系

4 流程的审核
根据流程的id查询业务表中对应的流程实例,在根据流程id查询activiti中对应的实例
根据当前处理人的id,远程调用用户微服务获取用户对象
根据处理的类型(驳回,通过)等进行不同操作,不通过删除该流程,
如果审核通过,完成当前的任务,并查询下一个节点,如果没有节点,任务结束,修改流程状态,如果有一下节点,同样查询该节点的候选组,根据候选组去我们对应业务表中查询候选组所对应的用户,

5流程的查询
根据流程的审批类型,审批状态,当前节点的处理人,以及发起人构造条件查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值