摘 要
本文旨在设计和实现一个基于SpringBoot的电子发票管理系统,以提升企业的发票管理效率和准确性。随着电子化发票管理的需求增加,企业需要一个高效、可靠且功能丰富的系统来帮助管理发票信息。基于SpringBoot的电子发票管理系统将提供诸如发票信息、开具等功能,以支持企业的发票管理需求。
该系统将采用SpringBoot框架,结合相关技术如Spring Data JPA、Thymeleaf、Bootstrap等,实现用户登录认证、发票数据的增删改查操作等功能。通过良好的代码结构和模块化设计,系统的可维护性和可扩展性将得到提升。为保障数据安全性,系统将采取安全措施,如数据加密、访问控制等。
通过这个电子发票管理系统,企业能够更高效地进行电子发票管理,提升发票数据的准确性和可靠性。系统的灵活性和易用性将提高员工的工作效率,为企业带来更好的电子发票管理体验。
关键词:SpringBoot;电子发票管理系统;MySQL。
Electronic Invoice Management System
ABSTRACT
This article aims to design and implement an electronic invoice management system based on SpringBoot to improve the efficiency and accuracy of enterprise invoice management. With the increasing demand for electronic invoice management, enterprises need an efficient, reliable, and feature rich system to help manage invoice information. The electronic invoice management system based on SpringBoot will provide functions such as invoice information and issuance to support the invoice management needs of enterprises.
The system will adopt the SpringBoot framework, combined with relevant technologies such as Spring Data JPA, Thymeneaf, Bootstrap, etc., to achieve user login authentication, invoice data addition, deletion, modification and query operations, and other functions. Through good code structure and modular design, the maintainability and scalability of the system will be improved. To ensure data security, the system will take security measures such as data encryption, access control, etc.
Through this electronic invoice management system, enterprises can more efficiently manage electronic invoices, improve the accuracy and reliability of invoice data. The flexibility and ease of use of the system will improve employee work efficiency and bring a better electronic invoice management experience to the enterprise.
Keywords: SpringBoot; Electronic invoice management system; MySQL.
目 录
1.1. 课题背景和意义
在企业运营中,电子发票管理是至关重要的一环,对企业的效率和合规性起着关键作用。然而,传统的发票管理方式存在诸多问题,如纸质发票易丢失、管理繁琐等,无法满足现代企业日益增长的管理需求。随着信息技术的快速发展,企业意识到数字化转型对电子发票管理的重要性。引入信息系统和自动化工具可以提高发票管理的准确性和效率,降低成本,实现电子发票管理的数字化和智能化。
SpringBoot作为一种快速构建Java应用程序的开发框架,具有简单易用、高效稳定的特点。利用SpringBoot的优势,可以快速搭建电子发票管理系统的后台服务,实现数据存储、业务逻辑处理和接口对接等功能。不同企业对电子发票管理系统的需求各不相同,例如发票信息、开具发票、开具审批等。基于SpringBoot的电子发票管理系统能够灵活满足企业不同的需求,通过模块化设计和可配置性,实现个性化的电子发票管理方案。
1.2 国内外研究现状
在国内外,电子发票管理系统的研究与应用已成为财务领域的研究热点。国外学术界在这一领域进行了广泛的探索与实践,注重利用先进的技术手段和创新理念,提升电子发票管理的效率和质量。例如,在美国、英国等发达国家的企业,已经引入了电子发票管理系统,借助SpringBoot框架等技术,实现了电子发票的在线化、智能化管理,提高了发票数据处理的速度和准确性。他们注重用户体验和数据分析,通过大数据技术对电子发票数据进行挖掘和分析,实现电子发票管理的精细化和智能化。
在国内,随着信息化进程的推进,电子发票管理系统的研究也逐渐受到重视。国内企业借鉴国外经验,积极探索电子发票管理的创新模式和技术手段,推动企业财务管理效率的提升。一些企业在电子发票管理系统的设计与实现方面进行了实践探索,通过引入采用springboot的框架和管理理念,优化电子发票处理流程,提升了电子发票管理的效率和服务质量。同时,国内企业也加强了对电子发票管理信息化的建设,注重数据的收集和分析,提升了管理决策的科学性和准确性。
综上所述,国内外在电子发票管理系统研究领域的探索与实践表明,利用springboot框架的先进技术和管理手段提升电子发票管理效率是当前的共同关注点。未来,随着技术的不断发展和财务管理理念的创新,电子发票管理系统将继续深化,为企业财务管理提供更加智能化、便捷化的支持与服务。
1.3论文结构与章节安排
论文将分层次经行编排,除去论文摘要致谢文献参考部分,正文部分还会对系统需求做出分析,以及阐述大体的设计和实现的功能,最后罗列部分调测记录,论文主要架构如下:
第一章:引言。第一章主要介绍了课题的研究背景和意义,选题开发的国内外研究现状和本文的研究内容与主要工作。
第二章:系统需求分析。主要从系统的用户、功能等方面进行需求分析。
第三章:系统设计。主要对系统框架、系统功能模块、数据库进行功能设计。
第四章:系统实现。主要介绍了系统框架搭建、系统界面的实现。
第五章:系统测试。主要对系统的部分界面进行测试并对主要功能进行测试
第六章:总结。
2.1 可行性分析
2.1.1技术可行性
电子发票管理系统在技术上是完全可行的。SpringBoot框架作为业界广泛使用的轻量级、开源的Java Web开发框架,具有简化开发、快速部署的特点,能够满足电子发票管理系统的技术需求。SpringBoot提供了约定大于配置的开发理念,简化了项目配置和搭建过程,同时集成了常用的开发工具和插件,使得开发更加高效。整合SpringBoot与Spring MVC、Spring Data JPA等技术,采用Vue前端框架,从而确保系统具备良好的可扩展性、人机交互界面、可维护性和稳定性。
2.1.2经济可行性
在开发电子发票管理系统所使用的开发软件像IDEA开发工具、Tomcat8.0服务器、MySQL5.7数据库、Photoshop图片处理软件等,这些都是开源免费的,并且电子发票管理系统是自己设计并编码实现的,数据库是使用流行mysql进行数据的存储,开源的mysql等技术的使用,减少系统开发费用。
2.1.3操作可行性
操作可行性主要是对电子发票管理系统设计完成后,用户的使用体验度,以及管理员可以通过系统随时管理相关的数据信息,并且对于管理员、普通用户两种角色,都可以简单明了的进入到自己的系统界面,通过界面导航菜单可以简单明了地操作功能模块,方便用户信息的操作需求和管理员管理数据信息,对于系统的操作,不需要专业人员都可以直接进行功能模块的操作管理,所以在系统的可操作性是完全可以的。本系统的操作使用的也是界面窗口进行登录,所以操作人员只要会简单的电脑操作就完全可以的。
2.2 功能需求分析
2.2.1 功能性分析
在开发电子发票管理系统之前,我们必须进行详尽的需求分析和市场调研。这些工作旨在深入了解系统管理人员、普通用户的实际需求,确保系统能够满足电子发票和管理的实际运作要求,从而精准地确定系统的开发方向。
我们需要对电子发票管理系统流程进行深入分析,明确发票信息详情、发票开具管理、开具审核等各个环节的具体需求。同时,考虑系统的性能要求,确保系统在高并发情况下仍能稳定运行,为用户提供流畅的使用体验。
我们还需要对系统的安全性进行充分考虑。由于电子发票管理系统涉及到用户信息、发票信息等敏感数据,因此必须确保系统的数据安全性和用户隐私保护。这包括数据加密、权限控制、操作日志记录等方面的安全措施。
在系统设计阶段,我们将重点关注满足系统管理人员、用户的实际需求。通过深入了解他们的日常工作流程和管理任务,我们将确定系统所需的功能。例如,为系统管理人员提供发票信息管理、发票开具管理、审核发票开具、查看发票信息统计跟踪等功能,为普通用户提供便捷的发票信息管理等功能。
同时,我们还将注重系统的可扩展性和灵活性。随着企业规模的不断扩大和管理需求的不断变化,系统需要能够灵活应对这些变化。因此,在系统设计时,我们需要考虑系统的模块化设计、接口标准化等方面的问题,以便未来能够方便地进行功能扩展和系统升级。
针对电子发票管理系统的设计特性,我们必须确保满足以下几项基本要求:
1.系统应提供简洁易懂的用户界面,方便用户快速上手并高效完成报修任务。
2.系统应实现管理、审核、统计等全流程的自动化管理,提高电子发票管理系统效率和工作质量。
3.系统应提供实时有效的数据沟通渠道,确保系统管理人员、用户之间的信息畅通无阻。
4.系统应确保数据的安全性和隐私保护,防止数据泄露和滥用。
通过满足这些要求,我们相信电子发票管理系统将能够为电子发票管理系统带来实质性的改进和提升,为系统管理人员和用户提供更加便捷、高效的服务。同时,该系统也将为企业信息化建设贡献一份力量,推动企业后勤服务向数字化、智能化方向发展。
按照电子发票管理系统的角色,主要包括普通用户模块和管理员模块,其主要内容如下:
- 普通用户管理模块:
- 登录:当用户想要对系统中所实现的功能进行查询管理的时候,就必须进行登录到系统当中,如果没有账号的话,可以在登录窗口中进行注册,然后再通过账号密码登录。
- 后台首页:普通用户可以在后台首页查看发票信息统计表,快速了解发票的开具和审核情况。
- 发票信息管理:普通用户能够浏览发票信息列表,并查看具体的发票详情。他们还可以进行发票开具操作,并对发票信息进行查询和重置。通过输入用户姓名、消费时间、发票名称或发票编号,用户可以方便地搜索到特定的发票。此外,普通用户还可以下载消费明细,并对待审核和回复的发票进行管理。
- 发票开具管理:在发票开具管理模块,普通用户可以查看已开具发票的列表和详情。他们可以通过多种条件(如消费时间、发票名称、发票编号、开票时间、审核状态)进行搜索,以便快速定位到需要查看或管理的发票。此外,普通用户还可以查看开具发票的审核状态和回复内容,以便及时了解发票的处理进度。
- 管理员模块:
- 登录:管理员的账号是在数据列表中直接设置生成的,不需要进行注册,可直接输入账号密码登录,同时可对管理员资料进行增删改查。
- 后台首页:管理员可查看发票信息统计表,快速掌握发票的整体情况。
- 系统用户管理:管理员具备管理用户账号的权限,包括增删改查用户信息,并可以查看用户账号的状态,如已冻结、可用、异常或已注销等。
- 发票信息管理:管理员可以管理发票信息列表,包括添加新的发票信息、查看各发票的详情、进行发票开具等操作。同时,管理员可以通过用户姓名、消费时间、发票名称和编号等搜索发票信息,并支持下载消费明细。
- 发票开具管理:管理员可以查看发票开具详情列表,并具备查询、重置和删除发票开具记录的功能。通过消费时间、发票名称、发票编号、开票时间和审核状态等条件,管理员可以方便地进行搜索操作。此外,管理员还负责审核用户开具的发票,并及时回复相关信息。
- 权限管理:管理员可以管理权限列表,包括查看权限详情、修改前台列表信息详情等。管理员可以通过权限名和用户组进行查询,添加新的权限、修改现有权限或删除不需要的权限。这样,管理员能够确保不同用户只拥有其所需的权限,保障系统的安全性和稳定性。
2.2.2 非功能性分析
电子发票管理系统的非功能性需求比如系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下2-1表格中:
表2-1电子发票管理系统非功能需求表
安全性 | 主要指电子发票管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指电子发票管理系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响电子发票管理系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着电子发票管理系统的页面展示内容进行操作,就可以了。 |
可维护性 | 电子发票管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.3 系统用例分析
通过2.2功能的分析,得出了系统的用例图:
普通用户用例图如下所示。
图2-1 普通用户用例图
管理员用例图如下所示。
图2-2 管理员用例图
2.4 系统的流程分析
2.4.1登录流程
图2-4登录流程图
2.4.2添加信息流程
添加信息流程图,如下图所示:
图2-5添加信息流程图
2.4.3删除信息流程
删除信息流程图,如下图所示:
图2-6删除信息流程图
3.1 系统架构设计
电子发票管理系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。
图3-1 电子发票管理系统架构设计图
表现层(UI):又称UI层,主要完成电子发票管理系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用电子发票管理系统时的舒适度。UI的界面设计也要适应不同版本的电子发票管理系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。
业务逻辑层(BLL):主要完成电子发票管理系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。
数据层(DL):由于电子发票管理系统的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成电子发票管理系统的数据存储和管理功能。
3.2开发流程设计
电子发票管理系统的开发对管理模块和系统使用的数据库进行分析,编写代开发,规划和操作是构建信息管理应用程序的必要三步曲,它决定了系统是否能够真正实现预设功能以及是否可以在成功设计后实施。在开发过程中,每个阶段必须严格按照线性顺序进行开发,并且在相应阶段生成的每个工作都可以通过技术进行验证和检查。确保一个阶段完成后是正确的,不会造成下一阶段拖拽现象,使系统完成设计功能后得到保证。
从电子发票管理系统的成功开发经验来看,上述方法效果最为明显,最大程度地降低了系统开发的复杂性。如图3-2所示。
图3-2开发系统流程图
3.3系统功能模块设计
通过对电子发票管理系统的功能需求分析以及用例分析,得出了电子发票管理系统的功能模块图如图3-3所示。
3.4数据库设计
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.4.1 数据库概念结构设计
下面是整个电子发票管理系统中主要的数据库表总E-R实体关系图。
图3-4 系统总体ER图
3.4.2数据表
将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | invoice_information_id | int | 10 | 0 | N | Y | 发票信息ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用户账号 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | user_phone_number | varchar | 16 | 0 | Y | N | 用户电话 | |
5 | dissipate | datetime | 19 | 0 | Y | N | 消费时间 | |
6 | invoice_name | varchar | 64 | 0 | Y | N | 发票名称 | |
7 | invoice_number | varchar | 64 | 0 | Y | N | 发票编号 | |
8 | consumption_details | varchar | 255 | 0 | Y | N | 消费明细 | |
9 | consumption_amount | int | 10 | 0 | Y | N | 0 | 消费金额 |
10 | invoice_details | text | 65535 | 0 | Y | N | 发票详情 | |
11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | invoice_issuance_id | int | 10 | 0 | N | Y | 发票开具ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用户账号 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | user_phone_number | varchar | 64 | 0 | Y | N | 用户电话 | |
5 | dissipate | datetime | 19 | 0 | Y | N | 消费时间 | |
6 | invoice_name | varchar | 64 | 0 | Y | N | 发票名称 | |
7 | invoice_number | varchar | 64 | 0 | N | N | 发票编号 | |
8 | consumption_amount | int | 10 | 0 | Y | N | 0 | 消费金额 |
9 | invoicing_time | datetime | 19 | 0 | Y | N | 开票时间 | |
10 | invoice_header | varchar | 64 | 0 | Y | N | 发票抬头 | |
11 | invoice_amount | int | 10 | 0 | Y | N | 0 | 开票金额 |
12 | identification_number | varchar | 64 | 0 | Y | N | 识别号 | |
13 | billing_address | varchar | 64 | 0 | Y | N | 开票地址 | |
14 | invoice_hotline | varchar | 64 | 0 | Y | N | 开票电话 | |
15 | opening_bank | varchar | 64 | 0 | Y | N | 开户行 | |
16 | account_opening | varchar | 64 | 0 | Y | N | 开户账号 | |
17 | other_remarks | text | 65535 | 0 | Y | N | 其他备注 | |
18 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
19 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
20 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
21 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | user_phone_number | varchar | 16 | 0 | Y | N | 用户电话 | |
4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
4.1 普通用户模块
4.1.1后台首页界面
普通用户可以在后台首页查看发票信息统计表,快速了解发票的开具和审核情况。其主界面展示如下图所示。
图4-1 普通用户后台首页界面图
4.1.2 登录界面
管理员负责添加普通用户账号,普通用户在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对用户的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,其登录主界面展示如下图所示。
图4-2普通用户登录界面图
登录关键代码如下所示。
/
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
注册模块满足用户两部分,当用户想要进行资料相关信息的查询管理的时候,就必须进行登录,如果没有账号的话,在登录界面,点击“注册”按钮就会跳转到注册的界面,根据提示填写好注册信息,添加提交,注册的信息在数据库中就添加完成了,然后再输入填写好的账号和密码进行登录,其注册主界面展示如下图4-2所示。
图4-3普通用户注册界面图
用户注册关键代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
query.put("username",user.getUsername());
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
普通用户能够浏览发票信息列表,并查看具体的发票详情。他们还可以进行发票开具操作,并对发票信息进行查询和重置。通过输入用户姓名、消费时间、发票名称或发票编号,用户可以方便地搜索到特定的发票。此外,普通用户还可以下载消费明细,并对待审核和回复的发票进行管理。发票信息管理界面图如下图所示。
![](https://i-blog.csdnimg.cn/direct/8b7447ecdbdd4b10ab17d447315ad8ba.png)
图4-4发票信息管理界面图
在发票开具管理模块,普通用户可以查看已开具发票的列表和详情。他们可以通过多种条件(如消费时间、发票名称、发票编号、开票时间、审核状态)进行搜索,以便快速定位到需要查看或管理的发票。此外,普通用户还可以查看开具发票的审核状态和回复内容,以便及时了解发票的处理进度。发票开具管理界面图如下图所示。
图4-5发票开具管理界面图
4.2 管理员功能模块
管理员可查看发票信息统计表,快速掌握发票的整体情况。后台首页管理界面如下图所示。
图4-6后台首页界面图
管理员具备管理用户账号的权限,包括增删改查用户信息,并可以查看用户账号的状态,如已冻结、可用、异常或已注销等。系统用户管理界面如下图所示。
图4-7系统用户管理界面图
系统用户管理的关键代码如下:
server:
port: 5000
servlet:
context-path: /api
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/CS725260_20211101091736?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jackson:
property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
default-property-inclusion: ALWAYS
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
管理员可以管理发票信息列表,包括添加新的发票信息、查看各发票的详情、进行发票开具等操作。同时,管理员可以通过用户姓名、消费时间、发票名称和编号等搜索发票信息,并支持下载消费明细。发票信息界面如下图所示。
图4-8发票信息管理界面图
管理员可以查看发票开具详情列表,并具备查询、重置和删除发票开具记录的功能。通过消费时间、发票名称、发票编号、开票时间和审核状态等条件,管理员可以方便地进行搜索操作。此外,管理员还负责审核用户开具的发票,并及时回复相关信息。发票开具、审核界面如下图所示。
图4-9发票开具管理界面图
发票开具管理关键代码如下所示。
@EnableJpaRepositories
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
发票开具审核界面如下图所示:
图4-10发票开具审核界面图
管理员可以管理权限列表,包括查看权限详情、修改前台列表信息详情等。管理员可以通过权限名和用户组进行查询,添加新的权限、修改现有权限或删除不需要的权限。这样,管理员能够确保不同用户只拥有其所需的权限,保障系统的安全性和稳定性。权限管理界面如下图所示。
图4-11权限管理界面图
5.1系统测试的目的
程序设计不能保证没有错误,这是一个开发过程,在错误或错误的过程中都是难以避免的。虽然这是不可避免的,但我们不能使这些错误始终存在于系统中,错误可能会造成无法估量的后果,如系统崩溃,安全信息泄露,系统无法正常启动等,为了避免这些问题,我们需要测试程序,再测试过程中发现问题,并纠正它们,从而使系统更长时间稳定成熟。本章的作用是发现这些问题,并对其进行修改,虽然耗时费力,但对于长期使用而言是非常重要和必要系统的开发。
软件在设计后必须进行测试,调试过程中使用的方法是软件测试方法。在开发新软件时,系统测试是检查软件是否合格的关键步骤,以及是否符合设计目标的参考。测试主要是查看软件中数据的准确性,正确的操作与否,以及操作的结果,还有哪些方面需要改进。
电子发票管理系统的实现,对于系统中功能模块的实现及操作都必须通过测试进行来评判系统是否可以准确的实现。在电子发票管理系统正式上传使用之前必须做的一步就是系统测试,对于测试发现的错误及时修改处理,保证系统准确无误的供给用户使用。
5.2系统测试方法
在对电子发票管理系统进行测试的时候在找到问题的情况下必须在第一时间找到解决问题的办法,不要存在侥幸的心理,这样才能让电子发票管理系统开发的质量可以过关,并且开发的周期会大大缩短,还有就是在测试时,不要出现重复性的错误,遇到一个错误问题,要将整个电子发票管理系统开发所牵扯的该问题都必须一一解决,提高电子发票管理系统的安全性、稳定性。
白盒测试与黑盒测试是测试中比较常用的两种方法。
①结构测试俗称白盒测试:这种测试是在对程序的处理过程与结构都有详尽谅解的前提下,顺从程序内部的逻辑而完成的系统测试,以确定系统中所有的通路都能够遵照设计要求正常工作,不出现任何偏差。
②功能测试又成黑盒测试:主要是针对程序功能能够按照设计正常实现的一种检测,在程序接口处进行,检测程序手法数据是否正常,与外部信息的交换是否完整。
5.3功能测试
用户登录测试:
模块名称 | 测试用例 | 预期结果 | 实际结果 | 是否通过 |
登录模块 | 用户名:admin 密码:123 | 弹出错误提示,提示密码错误 | 弹出错误提示,提示密码错误 | 通过 |
登录模块 | 用户名:123 密码:admin | 弹出错误提示,提示用户名错误 | 弹出错误提示,提示用户名错误 | 通过 |
登录模块 | 用户名:admin 密码:admin | 管理员登录成功 | 管理员登录成功 | 通过 |
删除分类测试:
模块名称 | 测试用例 | 预期结果 | 实际结果 | 是否通过 |
删除分类模块 | 分类名:最新通知 | 删除成功、页面自动跳转 | 删除成功、页面自动跳转 | 通过 |
修改密码测试:
模块名称 | 测试用例 | 预期结果 | 实际结果 | 是否通过 |
修改密码模块 | 原密码:666 新密码:123 确认密码:123 | 弹出错误提示,提示原密码错误 | 弹出错误提示,提示原密码错误 | 通过 |
修改密码模块 | 原密码:admin 新密码:123 确认密码:333 | 弹出错误提示,提示确认密码不一致 | 弹出错误提示,提示确认密码不一致 | 通过 |
修改密码模块 | 原密码:admin 新密码:123 确认密码:123 | 密码修改成功 | 密码修改成功 | 通过 |
通过对功能的测试,电子发票管理系统的基本功能都是可行的,不管是系统里面的功能,还是界面的设计都是可值得推广宣传的。
至此,电子发票管理系统的设计与实现已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如springboot、JAVA语言、MYSQL、Vue,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。
当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。
参考文献
[1]Sri D H ,Budi S W ,J. S D S , et al. Co-seismic deformation and related hazards associated with the 2022 Mw 5.6 Cianjur earthquake in West Java, Indonesia: insights from combined seismological analysis, DInSAR, and geomorphological investigations [J]. Geoenvironmental Disasters, 2024, 11 (1):
[2]秦晓露. 企业财务管理工作中电子发票的应用研究 [J]. 中国农业会计, 2023, 33 (22): 52-54.
[3]Ghoshal A . Oracle’s MySQL HeatWave gets Vector Store, generative AI features [J]. InfoWorld.com, 2023,
[4]范聪. Y市税务部门电子发票推广问题及对策研究[D]. 吉林大学, 2023.
[5]陈蓓蕾,洪年松. 基于SpringBoot的数据库接口设计 [J]. 信息与电脑(理论版), 2023, 35 (16): 181-183.
[6]谢雯雯. 增值税电子专用发票管理问题研究[D]. 江西师范大学, 2023.
[7]钟隽. 浅谈区块链视角下增值税发票管理研究 [J]. 财富时代, 2023, (05): 64-66.
[8]谢文欢. “放管服”改革背景下S区税务局电子发票管理问题研究[D]. 华中师范大学, 2023.
[9]周一帆. 温州市瓯海区电子发票的税务监管研究[D]. 江西农业大学, 2023. [10]李天臣. A企业电子发票全流程应用管理优化研究[D]. 重庆理工大学, 2023.
[11]钟姿伊,李小兰,李玉婷. 基于Web的电子发票管理系统设计与实现 [J]. 电脑知识与技术, 2023, 19 (02): 39-41+49.
[12]沈秋实. 基于区块链的电子发票系统设计与实现[D]. 黑龙江大学, 2022. [13]刘杰. 电子发票的管理及推行策略研究——以A建筑公司为例 [J]. 中国总会计师, 2022, (09): 125-127.
[14]杨彦伟,孙喆,魏熙. 发票电子化流转的信息化建设实践 [J]. 航空财会, 2022, 4 (05): 17-23.
[15]代云香. 海量电子发票归集管理系统设计与实现[D]. 西安电子科技大学, 2022.
[16]陈飞飞,李维嫣. 医院电子票据管理的优化策略研究 [J]. 财富时代, 2022, (01): 100-102.
[17]Hejing W . Commerce Middle Office Management System Based on Springboot [J]. International Journal of Advanced Network, Monitoring and Controls, 2022, 7 (2): 32-45.
[18]汤宏. 医院电子发票在医院流程中的应用研究 [J]. 财会学习, 2021, (28): 131-133.
[19]金双双. L市发票电子化管理的问题研究[D]. 云南财经大学, 2021.
[20]张平印,杨光,薛方. “互联网+”背景下电子发票管理 [J]. 科技风, 2021, (11): 111-112.
致 谢
这次毕业设计能够完成,最重要的就是来自指导老师的帮助,老师不厌其烦的对我的论文及毕业设计提出非常有建设性的建议,我的毕设能够完成离不开老师的帮助。我对老师由衷的表示感谢,
其次要感谢大学四年里学院里所有的任课老师的教导,老师们在我整个大学四年里给予了我丰富的知识,让我能够在大学中不虚度光阴,踏踏实实的学习,没有这些老师不辞辛劳的教诲,我无法完成这四年的学业。
由于自己的水平有限,毕设仍然存在着很大的缺陷,各位老师若提出意见,我会努力改正。
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~