ihrm项目结构详解

news2024/11/14 17:59:57

大体介绍

在这里插入图片描述

云服务的三种模式

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流程的查询
根据流程的审批类型,审批状态,当前节点的处理人,以及发起人构造条件查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

选择排序算法介绍

算法介绍 选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是每次从待排序的元素中选取最小(或最大)的元素,放到已排序部分的末尾,直到全部元素排序完毕。 以下是选择排序的详细步骤&…

【实战】 六、用户体验优化 - 加载中和错误状态处理(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十)

文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理1~234.用useAs…

java实现一个简单的webSocket聊天demo

java实现一个简单的webSocket聊天demo 一、依赖二、配置准备三、demo代码编写四、启动测试五、编写业务 一、依赖 添加pom文件依赖 <!-- websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

IDEA环境配置汇总

1、配置项目编码 2、配置运行看板Services IDEA开启并配置Services窗口 这里已经配置好了&#xff0c;如果没有&#xff0c;就点击&#xff0c;点击Run Configuration Type&#xff0c;选择所需要的&#xff0c;点击即可。 配置spring与docker看板(按照上面的方法来配置&am…

【Python】查询SQL并用柱状图展示

需求&#xff1a; 查询2022年各月订单量&#xff0c;并用柱状图展示 SQL&#xff1a; select date_format(create_time,%Y-%m) as mon ,count(distinct order_id) as ord_cnt from prod.order_info where date_format(create_time,%Y-%m) between 2022-01 and 2022-12 group…

Mac OS装Windows系统开启虚拟化

目录 引言前提macOS开启虚拟化mac下的Windows开启虚拟化双系统开启虚拟化修改启动管理程序开启虚拟化 注意事项 引言 在开发工作中&#xff0c;很多软件需要用到virtual box&#xff0c;但是使用virtual box需要开启虚拟化&#xff0c;而有些苹果笔记本虚拟化是关闭的&#xf…

【GitHub】一条命令快速部署 Kubernetes(k8s) 集群的工具-sealos

Sealos 是一个GitHub上优秀的开源项目&#xff0c;目前项目点赞数已达&#xff1a;10.2k&#xff0c;核心特性&#xff1a; 管理集群生命周期下载和使用完全兼容 OCI 标准的分布式应用定制化分布式应用Sealos Cloud 项目开源协议&#xff1a;Apache-2.0 项目主开发语言&…

NSS [SWPUCTF 2022 新生赛]funny_web

NSS [SWPUCTF 2022 新生赛]funny_web 账号NSS 密码2122693401 私货不去细细研究了&#xff0c;直接看题。 num不等于12345&#xff0c;但是intval&#xff08;num&#xff09;等于12345 ①intval():可以获取变量的整数值intval()中有一个特性&#xff0c;其中若传入1e4&…

tensorboard与torchinfo的使用

目录 1. tensorboard1.1 本地使用1.2 远程服务器使用 2. torchinfoRef 1. tensorboard 1.1 本地使用 只需要掌握一个 torch.utils.tensorboard.writer.SummaryWriter 接口即可。 在初始化 SummaryWriter 的时候&#xff0c;通常需要指定log的存放路径。这个路径默认是 runs/…

Python脚本小工具之文件与内容搜索

目录 一、前言 二、代码 三、结果 一、前言 ​日常工作中&#xff0c;经常需要在指定路径下查找指定类型的文件&#xff0c;或者是指定内容的查找&#xff0c;在window环境中&#xff0c;即可以使用一些工具如notepad或everything&#xff0c;也可以使用python脚本。但在l…

【C++进阶】bitset位图介绍以及模拟实现

文章目录 位图介绍一、位图的引入二、位图的概念 位图模拟实现一、构造函数二、set&#xff0c;reset&#xff0c;test函数三、代码测试四、完整代码 位图介绍 一、位图的引入 先来看下边一道面试题&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符…

SAR ADC version2 ——ADC背景介绍

目录&#xff1a; ADC常用指标分类 静态性能&#xff1a;微分非线性&#xff1a;DNL 积分非线性&#xff1a;INL 仿真测试DNL&#xff1a;&#xff08;码密度法&#xff09;&#xff08;code density&…

OpenCV 入门教程:像素访问和修改

OpenCV 入门教程&#xff1a;像素访问和修改 导语一、像素访问1.1 获取图像的大小1.2 访问图像的像素值1.3 修改图像的像素值 二、示例应用2.1 图像反转2.2 阈值化操作 三、总结 导语 在图像处理和计算机视觉领域&#xff0c;像素级操作是非常重要和常见的任务之一。通过像素访…

Python——将F12得到的请求头转换成其对应json格式

问题引入 最近在鼓捣爬虫准备爬爬学校网站&#xff0c;用到pthon的requests库发送get请求时需要提供headers. 需要将请求头转换成json格式的数据。json格式如下所示 headers{"Path":"xxx","User-Agent":"xxx" } 但是从网页上f12复…

21-注册中心与配置中心Nacos

已经使用过了Spring cloud提供的Geteway、openFeign。 1、注册中心与配置中心 1.1、注册中心 相当于通讯录,让应用之间相互认识。 用途: 实例的健康检查。 路由转发:为了控制成本,会对机器做动态扩容,此时IP就不固定了。 远程调用。 1.2、配置中心 动态修改线上的配…

深入解析MySQL视图、索引、数据导入导出:优化查询和提高效率

目录 1. 视图&#xff08;View&#xff09;&#xff1a; 什么是视图&#xff1f; 为什么要使用视图&#xff1f; 视图的优缺点 1) 定制用户数据&#xff0c;聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 …

十一.Redis发布订阅

Redis发布订阅(pub/sub)是一种消息通信模式&#xff1a;发布者(pub)发送消息&#xff0c;订阅者(sub)接受消息。此种模式下&#xff0c;消息发布者和订阅者不进行直接通信&#xff0c;发布者客户端向指定的频道&#xff08;channel&#xff09; 发布消息&#xff0c;订阅该频道…

【MQTT】Esp32数据上传采集:最新mqtt插件(支持掉线、真机调试错误等问题)

前言 这是我在Dcloud发布的插件-最完整Mqtt示例代码&#xff08;解决掉线、真机调试错误等问题&#xff09;&#xff0c;经过整改优化和替换Mqtt的js文件使一些市场上出现的问题得以解决&#xff0c;至于跨端出问题&#xff0c;可能原因有很多&#xff0c;例如&#xff0c;合法…

MySQL基础篇第3章(基本的SELECT语句)

文章目录 1、SQL概述1.1 SQL背景知识1.2 SQL分类 2、SQL语言的规则与规范2.1 基本规则2.2 SQL大小写规范 &#xff08;建议遵守&#xff09;2.3 注释2.4 命名规则2.5 数据导入指令 3、基本的SELECT语句3.0 SELECT...3.1 SELECT...FROM3.2 列的别名3.3 去除重复行3.4 空置参与运…

营销人累了看看这5部影片吧!保你再燃激情

市场瞬息万变&#xff0c;做营销需不断学习充电&#xff0c;除了看书听课之外看电影也是学习营销的有效方式。今天小马识途营销顾问给大家推荐5部市场营销人员必看的高评分电影&#xff0c;相信看完之后&#xff0c;会对你今后的发展影响深远&#xff01;话不多说直接上干货&am…