一、项目描述:
为企业线上办公提供定制化需求。基于现有的微服务架构实现, 内置了部门管理、用户管理、角色管理、菜单管理、数据数据字典、定时任务、常用系统监控等基础功能,并内置了文件上传下载、导入导出、短信功能、邮件发送等常用工具,整合了layui前端常用组件。目前只支持PC端的应用。
二、软件架构:
后端:springboot、springmvc、shiro、mybatis、mybatis-Plus、 Alibaba Druid( 数据库连接池 )、redis、 Quartz、 kafka 、 SLF4J(日志组件)、 QcloudCOS(腾讯云存储)、 Maven、 swagger2(文档生成工具)、 fastjson
前端: jQuery、 layui、vue
三、内置功能:
项目主页:登录后进入项目主页包含左侧的导航栏及首页欢迎页;
系统管理:
-
用户管理:用于管理后台系统的用户
-
部门管理:通过不同的部门来管理和区分用户
-
菜单管理:维护系统菜单,操作权限,按钮权限
-
角色管理:维护系统角色信息,以角色为单位分配系统权限
-
数据字段管理:对系统中经常使用的一些较为固定的数据进行维护,如:是否、男女、类别、级别等
-
日志管理:系统正常操作日志记录和查询;系统异常信息日志记录和查询
系统监控 :
-
Druid连接池监控:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈
-
服务器监控:显示服务器内存信息、CPU信息、磁盘信息、JVM信息等性能指标
-
在线用户列表:显示在线用户信息
常用功能 :
-
微信支付:集成微信native支付功能
-
支付宝支付:集成支付宝 站二维码支付功能
-
短信服务?阿里云短信:集成阿里云短信SDK ?腾讯云短信:集成腾讯云短信SDK ?云潮云短信:集成云潮云短信SDK
-
定时任务:支持注解配置定时任务,支持动态维护定时任务,引入Quartz分布式定时调度
-
上传下载:集成普通文件上传、图片上传、多文件上传、拖动上传、腾讯云COS存储等功能
-
导入导出:引入POI工具,整合excel等导入导出功能
-
系统消息:支持发送系统消息
-
验证码:集成google验证码插件,支持算术验证码、动态验证码
常用功能:
-
上传图片:集成图片上传本地或数据库
流程管理:
-
流程类别:用于管理业务流程类别
-
流程模型:集成activiti在线流程设计器
-
流程部署:管理activiti流程部署,支持在线设计器流程部署与文件上传部署
-
流程定义:管理流程定义,显示流程版本
-
表单类别:用于管理业务表单类别
-
表单构建:在线表单设计器
-
表单列表:管理系统中的表单数据,分为在线设计的表单与系统预设表单
-
流程管理:集中管理系统中流程,涉及流程类别,权限,版本控制等
流程中心:
-
流程中心:显示系统在用最新版本流程
-
我的流程
我的草稿:显示我的流程草稿
我的申请:显示我的申请流程,可以查看审批进度
我的完结:显示我的完结流程
-
待我审批:显示系统中需要本人审批的流程
-
已办审批:显示系统中本人已经完成的审批流程
-
代办组任务:显示系统中有本人参与的组任务审批流
执行力管理:
-
会议管理
会议类型管理
会议室管理
会议室预定
会议管理
-
日 管理
我的日
下属的日
-
日程管理
我的日程
我下属的日程
我创建的日程
-
任务管理
我的任务
我创建的任务
我参与的任务
我监控的任务
-
目标管理
我的目标
我创建的目标
我参与的目标
部门目标
公司目标
人力资源管理:
-
组织架构管理
组织架构
岗位管理
-
人事档案
人事信息
人事合同
奖惩信息
离职管理
-
考勤管理
考勤日历设置
考勤日历视图
加班维护
加班统计
年假维护
年假统计
-
薪资管理
薪资管理
员工银行卡
-
招聘管理
招聘需求
招聘计划
简历库
面试记录
offer记录
后备资源库
-
培训管理
课程类别
课程管理
培训计划
培训实施
前端实例组件:
格栅、按钮 、表单 、导航 、选项卡 、进度条、面板、徽章、时间线 、动画、辅助、通用弹出层、上传 、时间日期、数据表格、分页 、滑块、评分、轮播、流加载 、工具、代码修饰、颜色选择器
四、演示截图:
五、项目重点难点分析
1、MQ在用户消息一致性方面的实践strong>
kafka实际上有个offset的概念,就是每个消息写进去,都有一个offset,代表他的序 ,然后consumer消费了数据之后,每隔一段时间,会把自己消费过的消息的offset提交一下,代表我已经消费过了,下次我要是重启啥的,你就让我继续从上次消费到的offset来继续消费吧。
但是凡事总有意外,比如我们之前生产经常遇到的,就是你有时候重启系统,看你怎么重启了,如果碰到点着急的,直接kill进程了,再重启。这会导致consumer有些消息处理了,但是没来得及提交offset,尴尬了。重启之后,少数消息会再次消费一次。
其实重复消费不可怕,可怕的是你没考虑到重复消费之后,怎么保证幂等性。
给你举个例子吧。假设你有个系统,消费一条往数据库里插入一条,要是你一个消息重复两次,你不就插入了两条,这数据不就错了你要是消费到第二次的时候,自己判断一下已经消费过了,直接扔了,不就保留了一条数据p>
一条数据重复出现两次,数据库里就只有一条数据,这就保证了系统的幂等性。
幂等性,我通俗点说,就一个数据,或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,不能出错。
那所以第二个问题来了,怎么保证消息队列消费的幂等性p>
其实还是得结合业务来思考,我这里给几个思路:
(1)比如你拿个数据要写库,你先根据主键查一下,如果这数据都有了,你就别插入了,update一下好吧!
(2)比如你是写redis,那没问题了,反正每次都是set,天然幂等性。
(3)比如你不是上面两个场景,那做的稍微复杂一点,你需要让生产者发送每条数据的时候,里面加一个全局唯一的id,类似订单id之类的东西,然后你这里消费到了之后,先根据这个id去比如redis里查一下,之前消费过吗没有消费过,你就处理,然后这个id写redis。如果消费过了,那你就别处理了,保证别重复处理相同的消息即可。
还有比如基于数据库的唯一键来保证重复数据不会重复插入多条,我们之前线上系统就有这个问题,就是拿到数据的时候,每次重启可能会有重复,因为kafka消费者还没来得及提交offset,重复数据拿到了以后我们插入的时候,因为有唯一键约束了,所以重复数据只会插入 错,不会导致数据库中出现脏数据。
如何保证MQ的消费是幂等性的,需要结合具体的业务来看。
六、项目中其他的内容点
1、工作流:activity、Jbpm这些是不可不知的。所以在做此类项目前有必要将这项技术给学习一下。
2、权限:shiro。除此之外在使用spring框架全家桶的时候一般还会考虑 SpringSecurity,那么为什么不使用 SpringSecurity以及使用shiro就是要考量的点了。在使用过程中shiro的配置(认证、授权)、所需注意的问题、优缺点等往往又是面试中很常问的点。
3、导入/导出:POI。不同类型的 表、不同格式的 表、并发情况下的 表等可能会产生的问题或注意事项有那些p>
4、maven如何解决的依赖冲突p>
5、Git的主干、分支开发,提交冲突等的处理。
以上的这些点大家参考一下,项目中也还有很多其他的问题这里不再做一一的赘述。大家有那些更好的建议欢迎留言!
参考:https://www.oschina.net/p/active4j-oa
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!