基于SpringBoot+Vue的OA管理系统

news2025/1/18 11:41:50
一、项目背景介绍:

办公自动化(Office Automation,简称OA),是将计算机、通信等现代化技术运用到传统办公方式,进而形成的一种新型办公方式。办公自动化利用现代化设备和信息化技术,代替办公人员传统的部分手动或重复性业务活动,优质而高效地处理办公事务和业务信息,实现对信息资源的高效利用,进而达到提高生产率、辅助决策的目的,最大限度地提高工作效率和质量、改善工作环境

二、项目技术简介:
  1. JAVA:Java是一门 面向对象编程语言 ,不仅 吸收了C++语言的各种优点 ,还摒弃了C++里难以理解的 多继承、指针 等概念,因此Java语言具有 功能强大和简单易用 两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。- Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。
  3. Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
  4. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来 简化 新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  5. Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。

三、系统功能模块介绍:

四、数据库设计:

1:‘报销管理’(claim)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

emp_id

bigint

NULL

员工ID

info

varchar

NULL

申请理由

append_url

varchar

NULL

附件链接

create_time

datetime

NULL

申请时间

total

varchar

NULL

申请金额

status

int

NULL

状态[0:已提交,1:申请通过,2:申请驳回,3已撤回]

leave_info

varchar

NULL

拒绝理由

2:‘员工表’(emps)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

name

varchar

NULL

姓名

sex

int

NULL

性别[0:男,1:女,2:未知]

birthday

datetime

NULL

出生日期

id_card

varchar

NULL

身份证号

address

varchar

NULL

家庭住址

age

int

NULL

年龄

phone

varchar

NULL

联系方式

work_state

varchar

NULL

就职状态[0:在职,1:离职]

join_time

datetime

NULL

入职时间

leave_time

datetime

NULL

离职时间

salary

varchar

NULL

基本工资

create_time

datetime

NULL

创建时间

user_name

varchar

NULL

账号

pass_word

varchar

NULL

密码

img

varchar

NULL

照片

bank_no

varchar

NULL

银行卡号

3:‘员工请假表’(leaves)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

emp_id

bigint

NULL

员工ID

start_time

datetime

NULL

开始时间

end_time

datetime

NULL

结束时间

info

text

NULL

申请理由

status

int

NULL

状态[0:未审批,1:通过,2:拒绝,3:撤回]

refused_indo

varchar

NULL

拒绝理由

create_time

datetime

NULL

创建时间

4:‘管理员表’(manage)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

user_name

varchar

NULL

用户名

pass_word

varchar

NULL

密码

head_img

varchar

NULL

头像

nick_name

varchar

NULL

昵称

create_time

datetime

NULL

创建时间

5:‘会议表’(meets)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

title

varchar

NULL

会议标题

append_url

varchar

NULL

附件链接

status

int

NULL

状态[0:未发送,1:已发送]

create_time

datetime

NULL

创建时间

6:‘通知表’(noticle)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

notice_info

text

NULL

通知内容

title

varchar

NULL

通知标题

create_time

datetime

NULL

创建时间

staus

int

NULL

状态[0:已发送,1:未发送]

7:‘打卡表’(punchs)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

emp_id

bigint

NULL

员工ID

handle_time

date

NULL

日期

type

int

NULL

状态[0:正常,1:请假]

8:‘报告表’(reports)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

emp_id

bigint

NULL

员工ID

content

text

NULL

报告内容

type

int

NULL

类型[0:日报,1:周报,2:月报]

append_url

varchar

NULL

附件URL

create_time

date

NULL

汇报时间

9:‘工资表’(salary)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

emp_id

bigint

NULL

员工ID

total

varchar

NULL

工资总额

basic

varchar

NULL

基本工资

with_hold

varchar

NULL

扣款

add_money

varchar

NULL

其他金额

month_time

varchar

NULL

月份

info

varchar

NULL

说明

10:‘员工日程表’(schedules)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

emp_id

bigint

NULL

员工ID

content

text

NULL

日程内容

create_time

date

NULL

创建时间

五、功能模块:
  1. 考勤模块:员工可通过系统进行每日打卡,请假,请假需要管理员进行审核,管理员可以拒绝亦可以通过,拒绝时可以填写拒绝理由

  1. 会议通知模块:管理员可以向员工发布会议通知,以及日常通知,会议通知则可以添加附件,而普通通知则会以markdown的格式向员工进行展示多样化的内容,并且员工可以实时收取到通知

  1. 日程模块:员工可以给自己添加每日计划来提醒自己,然后也可以编写日报周报或者年报,管理员则可以查看员工填写的内容

六、代码示例:
考勤模块
@Override
    protected void beforeSave(PunchsDTO entity) throws Exception {
        String formatNow = LocalDateTimeUtils.formatNow(LocalDateTimeUtils.yyyy_MM_dd);
        LambdaQueryWrapper<PunchsDTO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(PunchsDTO::getHandleTime, formatNow);
        List<PunchsDTO> punchsDTOS = this.baseService.list(queryWrapper);
        if (CollectionUtil.isNotEmpty(punchsDTOS)) throw new Exception("当日已打卡,不可重复打卡!");
        entity.setHandleTime(new Date());
        super.beforeSave(entity);
    }

会议通知模块
 /**
     * 员工获取会议
     *
     * @return
     */
    @GetMapping("/emp")
    public ReturnMsg getEmpNotice() {
        LambdaQueryWrapper<MeetsDTO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MeetsDTO::getStatus, 1).orderByDesc(MeetsDTO::getCreateTime).last("limit 5");
        return ReturnMsg.ok(this.baseService.list(queryWrapper));
    }

日程模块
 @GetMapping("/all/emps")
    public ReturnMsg allEmps() {
        List<BaseSelectEntity> list = new ArrayList<>();
        List<EmpsDTO> dtos = empsService.list();
        for (EmpsDTO dto : dtos) {
            BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
            baseSelectEntity.setKey(dto.getId());
            baseSelectEntity.setValue(dto.getName());
            list.add(baseSelectEntity);
        }
        return ReturnMsg.ok(list);
    }

    @GetMapping("/current/{empId}")
    public ReturnMsg current(@PathVariable Long empId) {
        LambdaQueryWrapper<SchedulesDTO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SchedulesDTO::getEmpId,empId).eq(SchedulesDTO::getCreateTime, LocalDateTimeUtils.formatNow(LocalDateTimeUtils.yyyy_MM_dd)).last("limit 1");
        return ReturnMsg.ok(baseService.getOne(queryWrapper));
    }

七、项目总结:

作为毕业设计,分配给本系统的设计与制作时间还是不足的,所以,OA系统还有许多需要完善的地方。

    第一个就是本系统的编程代码问题,各个程序文件的代码存在冗余的地方非常多,导致代码不够简洁,同时对代码的注释也比较麻烦。编码期间,对于很多页面可以共享的函数与方法都没有单独列出来,而是在需要用到函数和方法的页面上都重新编写了代码,通过后期的技术学习,以及对编码过程的分析总结,发现可以把共用的函数或方法编写在同一个页面上,在之后的页面中,需要使用此函数的页面,则可以直接调用函数,无需再编写代码了,这样可以简化代码,也能节省时间和存储空间。

    第二个就是对数据库的设计不够好,在数据处理中,影响程序运行速度。因此需要对数据库的性能进行优化。通过这方面知识的学习,在某个开发技术类的博客中,发现可以用数据库连接池技术来解决数据库的性能问题,另外还需规范数据库里面的关系模式,降低数据库的冗余率,提高运行速度。

    如果说平时的作业也是检查对知识的掌握情况,那么制作毕业设计,将是对自身所有知识的一个全面检测。因为系统能够制作完成则是经历了很多阶段,正如文中所展示的那样,先有可行性分析,对功能的分析,对功能的设计,对数据库的设计,对程序功能的编码实现,对完成编码程序的测试等,这些环节缺一不可,而且还都需要认真对待,大学学到的所有知识在制作系统时,才会发现不够用。所以这个项目制作,在检测自身能力的同时,也对问题分析,资料搜集,问题解决等能力进行了培养。

八、源码获取:

 此源码非开源,若需要此源码可扫码添加微信进行咨询!

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

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

相关文章

面试题——JVM老年代空间担保机制(我的想法)

这里借用一下人家的图&#xff0c;来说一下我的想法&#xff0c;嘻嘻。。。。 原文链接&#xff1a;一道面试题&#xff1a;JVM老年代空间担保机制-CSDN博客? 嗯&#xff0c;我觉得老年代担保机制的主要作用就是避免频繁触发FULL GC&#xff0c;这其实也是因为年轻代Minor GC…

DV证书与OV证书的区别

在网络安全日益受到重视的今天&#xff0c;数字证书扮演着至关重要的角色。其中&#xff0c;DV证书&#xff08;域名验证证书&#xff09;和OV证书&#xff08;组织验证证书&#xff09;是两种常见的SSL/TLS证书类型&#xff0c;它们在验证流程和适用场景上存在显著区别。 首先…

666666666666666666

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

LeetCode题练习与总结:插入区间--57

一、题目描述 示例 1&#xff1a; 输入&#xff1a;intervals [[1,3],[6,9]], newInterval [2,5] 输出&#xff1a;[[1,5],[6,9]]示例 2&#xff1a; 输入&#xff1a;intervals [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval [4,8] 输出&#xff1a;[[1,2],[3,10],[…

数据结构二叉树链式存储

二叉树 1. 二叉树的遍历1.1 前序遍历1.2 中序遍历1.3 后序遍历1.4 层序遍历2. 二叉树的高度3. 某一层结点的个数4. 计算二叉树的结点5. 叶子结点的个数6. 销毁二叉树 二叉树的顺序存储通过堆已经介绍过了&#xff0c;现在介绍二叉树的链式存储。关于二叉树&#xff0c;有 如下…

C#复习——变长参数和可选参数

变长参数——params 参数默认值 总结 配合泛型类实现迭代器的语法糖使用&#xff1a;

7.java openCV4.x 入门-Mat之转换、重塑与计算

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

电商API接口|Python爬虫 | 如何用Python爬虫一天内收集数百万条电商数据?

你是否遇到过需要收集大量数据的问题&#xff1f;比如需要分析市场趋势&#xff0c;或者是想要了解某个领域的发展动态。手动收集这些数据既费时又费力&#xff0c;而且很难保证数据的准确性和完整性。那么有没有一种方法可以快速高效地收集大量数据呢&#xff1f; 技术汇总 …

xss.pwnfunction-Ma Spaghet!

根据代码得知 这个是根据get传参的并且是由someboby来接收参数的 所以 <script>alert(1137)</script> js并没有执行因为 HTML5中指定不执行由innerHTML插入的<script>标签 所以 ?somebody<img%20src1%20onerror"alert(1337)"> 这样就成…

双指针-移动零

首先不能复制&#xff0c;只能在原数组是哪个操作&#xff0c;那么很多集合的方式就不行了。当然在现实开发中肯定是可以的。目前按照题目来说是不可以的。所以我们可以思考下&#xff0c;是否可以通过交换来实现。 初始化一个变量 to 为 0。这个变量的目的是跟踪非零元素应该…

【MySQL】增删改查操作(基础)

文章目录 1、新增操作&#xff08;Create&#xff09;1.1单行数据全列插入1.2多行数据指定列插入 2、查询操作&#xff08;Retrieve&#xff09;2.1全列查询2.2指定列查询2.3指定列查询2.4别名&#xff08;as&#xff09;2.5去重&#xff08;distinct&#xff09;2.6排序&#…

java数据结构与算法刷题-----LeetCode405. 数字转换为十六进制数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 分组位运算 分组位运算 这道题正常来说可以用转换7进制的思想来&…

Linux第5课 Linux目录介绍

文章目录 Linux第5课 Linux目录介绍一、打开系统目录二、查看系统目录 Linux第5课 Linux目录介绍 系统目录就是指操作系统的主要文件存放的目录&#xff0c;目录中的文件直接影响到系统是否正常工作&#xff0c;了解这些目录的功能&#xff0c;对使用系统会有很大的帮助。 一…

ChatGPT(3.5版本)开放无需注册:算力背后的数据之战悄然打响

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

JAVA8 新特性StreamAPI使用(二)

一、使用StreamAPI&#xff0c;&#xff08;基于数据模型——客户、订单和商品&#xff0c;实体关系图如下&#xff0c;客户可以有多个订单&#xff0c;是一对多的关系&#xff0c;而产品和订单的关系是多对多的&#xff09;需求如下&#xff1a; 二、Stream API思维导图 三、需…

2024.4.1-[作业记录]-day06-认识 CSS(三大特性、引入方式)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; day06-认识 CSS(三大特性、引入方式) 文章目录 day06-认识 CSS(三大特性、引入方式)作业…

上位机图像处理和嵌入式模块部署(qmacvisual之tcp服务器端)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上面一篇&#xff0c;我们谈到了tcp客户端&#xff0c;另外一种连接方法就是tcp服务器端。事实上&#xff0c;对于第三方系统&#xff0c;大多数情…

蓝桥杯杯赛之深度优先搜索优化《1.分成互质组》 《 2.小猫爬山》【dfs】【深度搜索剪枝优化】【搜索顺序】

文章目录 思想例题1. 分成互质组题目链接题目描述【解法一】【解法二】 2. 小猫爬山题目链接题目描述输入样例&#xff1a;输出样例&#xff1a;【思路】【WA代码】【AC代码】 思想 本质为两种搜索顺序&#xff1a; 枚举当前元素可以放入哪一组枚举每一组可以放入哪些元素 操…

医院设置

广度优先和深度优先做这个题 题目描述 设有一棵二叉树&#xff0c;如图&#xff1a; 其中&#xff0c;圈中的数字表示结点中居民的人口。圈边上数字表示结点编号&#xff0c;现在要求在某个结点上建立一个医院&#xff0c;使所有居民所走的路程之和为最小&#xff0c;同时约定…

记第一次eudsrc拿到RCE(上)

目录 前言 个人介绍 挖洞公式 漏洞介绍 CLI命令注入介绍 RCE漏洞介绍 漏洞详情 漏洞点1 漏洞点2 修复建议 总结 前言 免责声明 以下漏洞均已经上报漏洞平台。请勿利用文章内的相关技术从事非法测试。若因此产生一切后果与本博客及本人无关。 本来想大学四年都不会…