第一章 绪论
1.1 研究背景与意义
法律咨询服务行业同现代社会快节奏的需求之间存在着尖锐的矛盾,即传统的运作方式和现代的要求之间存在矛盾。民众遇到法律问题的时候,一般要到律师事务所去实地咨询或者打电话预约,这样服务的获取效率低,信息透明度差。随着互联网技术的不断深入到各行各业当中,法律服务领域也正朝着数字化的方向转变。玛合巴勒·阿布都热合曼(2026)认为地方政府机关对于法律咨询服务机构的考评机制还存在着优化的空间,这说明官方层面对于法律服务质量一直保持关注[1]。张红(2026)从科技伦理的角度来研究人工智能的伦理规范问题,认为技术在应用过程中建立法律伦理框架是必要的[2]。李佩哲(2026)从社会系统论的角度出发,对生态环境保护督察制度进行研究,得出结论认为法律制度的完善要依靠系统的思维[3]。传统的法律服务方式同现代用户的需要存在较大的差距,创建一个线上法律咨询服务平台可以冲破时空的束缚,把律师资源同用户的需求很好地结合起来。该平台把资讯传播、案例学习、文书查阅、在线咨询、预约服务等各方面的功能模块有机地整合在一起,使普通用户可以随时随地得到法律上的帮助。律师用户可以在平台管理自己的履历、发布专业内容、接受咨询预约等,从而达到个人品牌线上传播、获取新客户的目的是可以的。管理员对于平台的内容、用户、订单等各方面均有控制权,从而保证服务质量以及平台秩序。系统使用JavaWeb技术栈来实现,它的意义就是促进法律服务业态的创新,降低法律服务获取的门槛,提高整个行业的服务效率。
1.2 国内外研究现状
国内法律咨询服务平台从最初的以信息展示为主的平台发展到现在可以进行互动服务、智能匹配的平台。早期的法律门户网站主要是起到信息发布的作用,用户只能被动地浏览法律新闻、法规条文等,并不能进行互动。李佩哲(2026)认为生态环境保护督察制度要从系统论角度去审视、完善,这个方法论也适合于法律服务平台的建设[3]。林亚儒(2024)对GF法律咨询服务公司的营销策略进行了详细的分析,发现了市场化的运作中,法律服务企业存在的获客渠道单一、品牌建设困难等种种问题[4]。武侠(2023)对中国法律服务网的智能法律咨询功能做了详细的介绍,展示了中国法律服务网在乡村智能化应用方面所进行的探索实践,给基层法律服务提供了一种可以复制的技术方案[5]。李晟(2022)以广州商学院法学院为研究对象,对高校资源和社会法律服务需求的对接进行探究,得出高校资源和社会法律服务需求的对接是可能的[6]。钦迪(2021)设计的大数据统计下高校法律咨询快速答复系统,给出了统计分析方法在法律咨询领域技术应用的途径[7]。由此一来,国内法律服务平台由单一功能走向综合服务,由被动响应变成智能匹配的清晰脉络就浮现出来。
国外法律咨询服务平台的发展途径是从社交化开始,到数据驱动的深度整合为止的。早期的平台主要是建立用户社区,让用户之间可以互相交流分享法律的经验和意见,但是专业性以及准确性很难得到保证。根据最近的研究表明,在英国有80%的小企业对于法律咨询存在拖延的行为,在需要法律咨询的时候会引发无法挽回的商业成本增加以及经营风险上升的情况[8]。美国加利福尼亚州Attorney Big Al法律服务机构给东赫梅特地区车祸索赔案给予专业的法律意见,表现出区域性的法律服务渠道怎样精准地定位[9]。VigquezLaw为佐治亚州和北卡罗来纳州的用户提供免费的个人伤害法律咨询,这样可以降低用户使用法律服务的心理门槛以及经济负担[10]。赵鑫(2025)提出的一种改进的CNN-GRU算法在企业法律咨询系统中得到了应用,这表明人工智能技术已经深入到法律服务流程当中,成为一种技术趋势[11]。Wilding J和Selby H(2025)对2020年代非营利法律咨询部门的总体情况做了全景式的呈现,发现这个领域在需求增加的同时,资源匮乏也一直存在[12]。从国外平台的发展经验来看,只有依靠数据驱动的个性化服务,将商业生态系统融合起来,才是法律咨询服务平台发展的重要方向。
1.3 研究内容
本文的主要工作就是设计并实现一个基于SpringBoot、Vue.js的法律咨询服务平台。本研究的工作过程是从需求分析开始,经过系统的分析,设计出相应的系统,然后编码实现,最后对所开发的应用系统进行测试并加以验证的过程。需求分析阶段找出三种用户使用功能需求以及非功能需求,决定系统的边界就是法律资讯查询、案例检索、文书管理、在线咨询、预约订单、评价反馈这些主要业务模块,没有支付结算、即时通讯这些扩展功能。系统设计阶段进行技术架构的选择、功能结构的规划、数据库的E-R模型的设计和表结构的定义。编码实现阶段使用前后端分离的方式创建RESTful API接口和响应式的前端界面来完成用户的认证授权、数据交换存取、业务操作等功能。测试验证阶段编写测试用例对核心业务流程进行功能测试。预期成果有可以运行的Web应用程序、完整的数据库设计文档、系统测试报告、符合本科规范的毕业论文。整体研究方法是按照软件工程的瀑布模型来展开的,用迭代优化的方式推进各个阶段的工作。
第二章 相关技术介绍
2.1 SpringBoot框架
SpringBoot框架是由Spring生态系统为了简化配置、快速开发而不断改进的。该框架依靠自动化的配置来减少传统Spring应用搭建时的繁琐。在请求响应机制里实现了内嵌Servlet容器的启动方式,应用启动的时候框架会自动扫描类路径下的依赖并完成Bean的装配[13]。框架内部定义了一个完整的启动流程,从初始化环境配置、加载核心组件、启动内嵌服务器等各个阶段的任务都是一致的。法律咨询服务平台运行时,SpringBoot对前端传来的HTTP请求进行处理,把请求的数据绑定到控制器的方法参数中,然后执行业务逻辑处理,最后返回JSON格式的响应。框架的自动配置原理是用条件注解来实现的,只有当某个类存在于类路径或者满足某种条件的时候才会调用相应的配置类。该框架也提供了很多starter依赖集合,开发者只需要引入这些依赖就可以得到预配置好的功能模块。
2.2 Vue.js框架
Vue.js是一个渐进式的JavaScript框架,它的设计思想主要是对视图层组件进行声明式的渲染。框架的核心就是响应式数据系统和虚拟DOM树这两个部分。当组件内部的数据发生改变的时候,框架就会启动依赖收集机制去追踪数据的变化,之后再重新计算出虚拟的DOM树并和之前的树结构进行差异比较[14]。此比对过程只对实际的DOM中发生变化的部分进行更新,而不会对整个页面进行更新。法律咨询服务平台的前端交互界面用Vue.js来创建,用户浏览法律案例列表的时候,框架会把后端返回的JSON数据按照模板中指定的位置映射过去。在组件化开发模式下,页面被拆分成独立可以复用的组件单元,每一个组件都有自己的模板逻辑以及样式。路由管理模块可以实现单页面应用中视图的切换,用户在资讯列表和咨询表单之间切换的时候,不会出现整个页面的刷新。状态管理模式可以解决各个组件之间数据共享、状态同步的问题。
2.3 MySQL数据库
MySQL数据库使用典型的以行和列形式组织数据的方式,把数据存放在二维表里。查询执行器接收到SQL语句之后,先做词法和语法解析,得到解析树,再由查询优化器来决定使用哪个索引以及执行路径[15]。存储引擎层是对数据进行实际的读写操作,InnoDB引擎支持事务提交回滚以及行级锁。当法律咨询服务平台的用户提交了法律服务咨询表单之后,就会使用INSERT语句将咨询的内容写入到相应的数据表中。数据库服务器在执行查询的时候,会先去检查缓冲池里有没有需要的数据页,如果没有命中缓存的话就会触发磁盘I/O来把数据页加载到内存当中。索引结构一般使用B+树组织方式,非叶子节点存放键值以及子节点指针,叶子节点是完整的数据记录或者主键值。事务日志记录了所有的数据修改操作,系统崩溃恢复的时候用重做日志把已经提交的事务重新执行。
MySQL数据库的并发控制机制使用的是多版本并发控制协议。每一个数据记录更新的时候都会产生一个新的版本,但是保留旧版本给只读事务使用。读写操作不会互相影响,写操作只会锁定需要修改的记录行而不是整个表。法律咨询服务平台上,当多个用户同时对律师信息进行查询、修改的时候,MVCC机制保证了读操作所看到的数据是快照版本的,而写操作则使用行锁串行化的方式执行。数据库的日志系统是由错误日志、二进制日志、慢查询日志等几个子系统组成的。二进制日志记录所有的数据修改操作,在主从复制架构中,从库通过重放二进制日志来保持和主库数据的一致性。查询缓存会保存SELECT语句和结果集,当同样的查询再次被执行的时候,就会从缓存中获取结果。
第三章 系统分析
3.1 可行性分析
3.1.1 技术可行性
法律咨询服务平台使用的是SpringBoot和Vue.js前后端分离的架构,该种结构把用户的界面渲染和业务逻辑处理分离开来。SpringBoot框架自带Tomcat服务器,应用打包之后可以直接运行JAR文件启动服务。使用Vue.js和axios库来完成异步数据请求,从而达到页面局部刷新的目的。MySQL数据库有数据持久化的能力,JDBC连接池来管理数据库连接资源。开发环境使用IntelliJ IDEA集成工具,代码变更的版本控制使用Git。经过大量的项目检验,这套技术组合中各个部分已经形成了一个成熟的、集成化的系统。开发人员只要掌握Java编程基础以及Web开发知识,就可以开始使用框架了。技术选型没有大的障碍。
3.1.2 经济可行性
系统开发所用到的软件工具都是开源或者免费的,IntelliJ IDEA社区版可以满足基本的开发需求。MySQL Community Server无需授权费用,Navicat试用版可在开发阶段使用。项目运行的硬件条件要求不高,普通的个人计算机就可以满足开发调试的要求,8GB内存就足够了。系统部署可以采用云服务商提供的低配置云服务器,学生优惠套餐的月费在可接受范围内。之后的运维成本主要是服务器续费、域名年费。项目总体投入较少,不需要购买商业软件或者专用硬件设备。经济上的投入不会是项目实施的障碍。
3.1.3 操作可行性
法律咨询服务平台面向三类用户,各类用户的操作路径也都是独立的。普通用户进入系统之后可以浏览法律资讯、案例,咨询页面采用表单的形式来收集问题描述。律师用户登录之后就会进入到个人管理中心,内容发布界面有文本编辑器以及文件上传控件。管理员用户有全平台数据的管理权限,后台管理界面用表格的形式显示各种记录。界面布局按照用户的认知习惯来设置按钮的文字说明点击后会产生的结果。用户不需要接受专业的培训就可以进行常规的操作。交互流程设计中考虑到了各个年龄段的用户所能够接受的程度。
3.2 功能需求分析
UML用例图是描述系统功能需求的图形化工具,用例图通过显示系统与外部参与者之间的交互关系来说明系统的功能。用例图以用例来表示系统能完成的特定功能,参与者则是与系统交互的各类用户或者外部系统。用例图可以在分析和设计阶段使用,保证系统的功能完整、正确,让开发者和客户有共同的语言。用直观的图示,UML用例图给出了系统功能与角色间的关系。本文将按照角色模块对系统进行需求分析。
3.2.1 普通用户用例图
普通用户登录系统后可以查询法律资讯内容,浏览法律案例库中的判例信息,下载法律文书模板。用户遇到法律问题时可以提交法律咨询请求并等待律师回复。律师预约功能允许用户查看律师资料并选择合适的预约时段。急单记录查询帮助用户追踪紧急咨询请求处理进度。用户完成咨询或预约后可以对服务过程进行评价反馈。普通用户用例图如图3-1所示。
图3-1普通用户用例图
3.2.2 律师用户用例图
律师用户登录系统后可以管理自己发布的法律案例资源,包括案例内容的增添删除。法律文书管理功能支持律师上传各类法律文书模板供用户下载。律师信息管理模块允许律师更新个人简介、擅长领域、资质证书等资料。法律咨询管理功能展示用户提交的咨询请求,律师可以对咨询内容进行回复处理。预约订单管理模块显示用户发起的预约请求,律师可以确认或拒绝预约。接单记录查询功能提供历史服务订单的检索查看。律师用户用例图如图3-2所示。
图3-2律师用户用例图
3.2.3 管理员用例图
管理员用户对所有的律师发布的案例进行审查,看是否符合规定。法律文书管理功能可以管理员删除违规的文书或者置顶优质的文书。律师信息管理模块对不符合要求的律师账号进行冻结。法律咨询管理功能监控咨询内容有无涉密信息。预约订单管理模块是处理用户和律师之间订单纠纷的。接单记录管理功能统计平台服务数据。评价反馈管理可以查看用户的评价,并对恶意的评价进行处理。资源管理是轮播图设置、公告张贴和用户权限的分配等。管理员用例图如图3-3所示。
图3-3管理员用例图
第四章 系统设计
4.1 系统架构设计
法律咨询服务平台使用B/S架构,也就是前后端分离,把用户的界面展示、业务逻辑处理和数据存储访问这三个层次都分离了出来。用户界面层负责接受用户的输入并显示数据,应用服务层集中处理业务规则、流程控制等,数据持久层把数据库的操作封装起来。各层之间采用HTTP协议以及JSON数据格式进行通信,前端使用axios库发起异步请求,后端控制器收到请求之后调用服务层组件执行业务处理。系统运行时,用户浏览器加载Vue.js创建的单页面应用,用户操作引起路由切换或者API调用。后端SpringBoot应用监听指定端口,接收到请求之后会经过过滤器链做预处理,DispatcherServlet按照请求的路径来调用对应的控制器方法[17]。架构设计按照关注点分离的原则,每一层只管本层的事务。系统架构图如下图4-1所示。
图4-1系统架构图
4.2 系统结构功能设计
根据法律咨询服务平台的用户角色,把其功能模块分为三类。普通用户可以浏览法律资讯、检索法律案例、下载法律文书、咨询律师、预约律师、查看急单进度、服务评价、反馈。律师用户可以发布、管理自己的法律案例,上传管理自己的法律文书,进行个人资料的编辑和更新,接收用户的咨询请求并作出回复处理,确认、拒绝用户的预约订单,查看自己以往的接单记录。管理员享有全平台最高的管理权限,可以对所有的案例文书进行审核,可以对律师的资质进行认证,可以对咨询的内容进行监控,可以对订单的纠纷进行仲裁,可以对评价的内容进行审核,可以对系统的轮播图进行设置,可以对平台的公告进行发布,可以对用户的权限进行分配。该系统的功能结构图如下图4-2所示。
图4-2系统功能结构图
4.3 系统流程设计
4.3.1 系统总体业务流程设计
用户第一次登录的时候需要进行注册,系统对用户名进行唯一性验证之后创建账户记录。已经注册的用户通过登录认证进入对应的用户工作区。普通用户浏览内容的时候,有专业问题的会提出法律咨询表单。咨询请求经系统发送到在线律师用户后,律师作出回复之后用户可以查阅答复内容。用户在选择律师之后提出预约申请,填写预约时间、服务要求之后提交订单。律师接到预约通知之后就进行服务的执行,即开始提供法律服务。服务结束之后,用户给出评价反馈,律师能够看到评价内容。系统的总体业务流程如图4-3所示。

图4-3系统总体业务流程图
4.3.2 法律咨询业务流程设计
普通用户进入咨询模块后填写问题描述,系统将咨询内容持久化存储并标记待回复状态。律师用户登录后查看待处理咨询列表,选择咨询条目进行答复处理。回复内容提交后系统更新咨询状态为已回复,同时向用户发送通知消息。用户查看回复内容后可以继续追问,咨询进入新一轮回复循环直至问题解决。管理员对咨询内容进行合规性检查,发现违规咨询时将其屏蔽。法律咨询业务流程如图4-4所示。
图4-4法律咨询业务流程图
4.3.3 律师预约业务流程设计
普通用户浏览律师列表查看律师资料和擅长领域,选择合适的律师后进入预约页面。用户填写预约日期和具体需求后提交预约申请,系统生成唯一预约单号。律师收到预约通知后查看预约信息,根据自身日程安排决定是否接单。律师确认接单后双方预约关系正式生效,系统更新订单状态为已接单。律师因日程冲突选择拒绝时系统通知用户重新选择律师。预约成功后用户在约定日期接受服务。律师预约业务流程如图4-5所示。

图4-5律师预约业务流程图
4.3.4 法律案例管理业务流程设计
律师用户登录系统后进入案例管理模块,点击新增按钮进入案例发布界面。律师填写案例名称、案例日期、案例详情等内容并上传封面图片,提交后案例进入待审核状态。管理员在后台查看待审核案例列表,检查案例内容是否符合平台规范。审核通过时案例状态变为已发布,用户端可见该案例。审核拒绝时案例退回给律师并附拒绝理由,律师修改后可重新提交。已发布的案例可以被用户浏览、收藏、评论。法律案例管理业务流程如图4-6所示。
图4-6法律案例管理业务流程图
4.3.5 评价反馈业务流程设计
用户完成咨询服务或预约服务后,系统在订单详情页展示评价入口。用户进入评价页面填写评价内容并选择评分等级,提交后评价信息关联到对应订单记录。律师用户可以查看自己收到的用户评价内容。管理员在后台监控所有评价内容,发现恶意差评或违规评价时进行审核处理。审核不通过的评价会被隐藏不在前端展示。平台定期统计各律师的平均评分和评价数量用于服务质量评估。评价反馈业务流程如图4-7所示。
图4-7评价反馈业务流程图
4.4 数据库设计
数据库设计是信息系统开发中的一项重要工作,数据库设计的好坏直接影响到系统的性能以及数据的一致性。关系型数据库模型用二维表来组织数据,表之间用外键约束来保证数据的完整性。规范化理论可以对设计过程中产生的数据冗余以及更新异常进行控制,第三范式是指非主属性完全依赖于候选键而不是传递依赖。本系统中的数据库用来存储用户的个人信息,业务数据以及关联关系。事务机制是保证一组数据库操作要么全部成功,要么全部回滚的机制。外键约束保证引用完整性,引用的记录存在时才可以插入外键值。唯一索引可以防止重复数据进入系统。检查约束可以对字段的取值范围进行限制[18]。
4.4.1 概念设计
设普通用户实体主要包括普通用户ID、用户ID、用户姓名、用户性别、审核状态等字段。实体属性图如图4-8所示。
图4-8普通用户实体属性图
律师用户实体主要包括律师用户ID、用户ID、律师姓名、律师性别、律师资质、审核状态等字段。实体属性图如图4-9所示。
图4-9律师用户实体属性图
律师信息实体主要包括律师信息ID、律师用户、律师姓名、律师性别、擅长领域、律师简介、封面图片、统计类字段等。实体属性图如图4-10所示。
图4-10律师信息实体属性图
法律案例实体主要包括法律案例ID、律师用户、律师姓名、案例名称、案例日期、案例详情、封面图片、统计类字段等。实体属性图如图4-11所示。
图4-11法律案例实体属性图
法律文书实体主要包括法律文书ID、律师用户、律师姓名、法律文书、文书类型、文书简介、文书附件、封面图片、统计类字段等。实体属性图如图4-12所示。
图4-12法律文书实体属性图
法律咨询实体主要包括法律咨询ID、普通用户、律师用户、用户姓名、律师姓名、用户咨询、咨询回复、咨询状态等。实体属性图如图4-13所示。
图4-13法律咨询实体属性图
预约订单实体主要包括预约订单ID、普通用户、律师用户、用户姓名、律师姓名、预约单号、预约日期、预约信息、预约状态等。实体属性图如图4-14所示。
图4-14预约订单实体属性图
接单记录实体主要包括接单记录ID、普通用户、律师用户、用户姓名、律师姓名、预约单号、预约日期、预约信息、接单备注等。实体属性图如图4-15所示。
图4-15接单记录实体属性图
评价反馈实体主要包括评价反馈ID、普通用户、律师用户、用户姓名、律师姓名、预约单号、用户评价、评价内容等。实体属性图如图4-16所示。
图4-16评价反馈实体属性图
用户账户实体主要包括用户ID、用户名、密码、用户组、昵称、头像地址、手机号码、邮箱、账户状态等。实体属性图如图4-17所示。
图4-17用户账户实体属性图
**
图4-18系统E-R图
4.4.2 数据库表设计
数据库逻辑设计阶段将概念模型转换为关系数据库所支持的表结构形式,依据实体间联系确定主外键约束与参照完整性规则。普通用户表主要是用来存储普通用户的个人档案信息。主要包括普通用户ID、用户ID、用户姓名、用户性别等字段。如表4-1所示。
表4-1普通用户表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 普通用户ID | int | 11 | 是 | 是 | 普通用户ID |
| 2 | 用户ID | int | 11 | 是 | 否 | 用户ID |
| 3 | 用户姓名 | varchar | 64 | 否 | 否 | 用户姓名 |
| 4 | 用户性别 | varchar | 64 | 否 | 否 | 用户性别 |
律师用户表主要是用来存储律师账号的认证信息。主要包括律师用户ID、用户ID、律师姓名、律师性别、律师资质等字段。如表4-2所示。
表4-2律师用户表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 律师用户ID | int | 11 | 是 | 是 | 律师用户ID |
| 2 | 用户ID | int | 11 | 是 | 否 | 用户ID |
| 3 | 律师姓名 | varchar | 64 | 否 | 否 | 律师姓名 |
| 4 | 律师资质 | varchar | 255 | 否 | 否 | 律师资质 |
律师信息表主要是用来展示律师对外公开的专业履历。主要包括律师信息ID、律师用户、律师姓名、擅长领域、律师简介、封面图片等字段。如表4-3所示。
表4-3律师信息表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 律师信息ID | int | 11 | 是 | 是 | 律师信息ID |
| 2 | 律师用户 | int | 11 | 否 | 否 | 律师用户 |
| 3 | 律师姓名 | varchar | 64 | 否 | 否 | 律师姓名 |
| 4 | 擅长领域 | varchar | 64 | 否 | 否 | 擅长领域 |
法律案例表主要是用来存储律师发布的典型判例资源。主要包括法律案例ID、律师用户、律师姓名、案例名称、案例日期、案例详情等字段。如表4-4所示。
表4-4法律案例表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 法律案例ID | int | 11 | 是 | 是 | 法律案例ID |
| 2 | 律师用户 | int | 11 | 否 | 否 | 律师用户 |
| 3 | 案例名称 | varchar | 64 | 否 | 否 | 案例名称 |
| 4 | 案例详情 | longtext | 4294967295 | 否 | 否 | 案例详情 |
法律文书表主要是用来存储各类法律文书模板文件。主要包括法律文书ID、律师用户、律师姓名、法律文书、文书类型、文书简介等字段。如表4-5所示。
表4-5法律文书表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 法律文书ID | int | 11 | 是 | 是 | 法律文书ID |
| 2 | 法律文书 | varchar | 64 | 否 | 否 | 法律文书 |
| 3 | 文书类型 | varchar | 64 | 否 | 否 | 文书类型 |
| 4 | 文书附件 | varchar | 255 | 否 | 否 | 文书附件 |
法律咨询表主要是用来记录用户与律师之间的问答过程。主要包括法律咨询ID、普通用户、律师用户、用户咨询、咨询回复、咨询状态等字段。如表4-6所示。
表4-6法律咨询表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 法律咨询ID | int | 11 | 是 | 是 | 法律咨询ID |
| 2 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 3 | 律师用户 | int | 11 | 否 | 否 | 律师用户 |
| 4 | 咨询状态 | varchar | 64 | 否 | 否 | 咨询状态 |
预约订单表主要是用来存储用户发起的律师预约请求。主要包括预约订单ID、普通用户、律师用户、预约单号、预约日期、预约信息、预约状态等字段。如表4-7所示。
表4-7预约订单表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 预约订单ID | int | 11 | 是 | 是 | 预约订单ID |
| 2 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 3 | 律师用户 | int | 11 | 否 | 否 | 律师用户 |
| 4 | 预约状态 | varchar | 64 | 否 | 否 | 预约状态 |
接单记录表主要是用来追踪律师已完成的订单历史。主要包括接单记录ID、普通用户、律师用户、预约单号、预约日期、接单备注等字段。如表4-8所示。
表4-8接单记录表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 接单记录ID | int | 11 | 是 | 是 | 接单记录ID |
| 2 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 3 | 律师用户 | int | 11 | 否 | 否 | 律师用户 |
| 4 | 接单备注 | text | 65535 | 否 | 否 | 接单备注 |
评价反馈表主要是用来收集用户对律师服务的满意度评价。主要包括评价反馈ID、普通用户、律师用户、预约单号、用户评价、评价内容等字段。如表4-9所示。
表4-9评价反馈表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 评价反馈ID | int | 11 | 是 | 是 | 评价反馈ID |
| 2 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 3 | 律师用户 | int | 11 | 否 | 否 | 律师用户 |
| 4 | 评价内容 | text | 65535 | 否 | 否 | 评价内容 |
用户账户表主要是用来存储登录认证所需的账号密码信息。主要包括用户ID、用户名、密码、用户组、昵称、头像地址、手机号码、邮箱等字段。如表4-10所示。
表4-10用户账户表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 用户ID | int | 11 | 是 | 是 | 用户ID |
| 2 | 用户名 | varchar | 16 | 是 | 否 | 用户名 |
| 3 | 密码 | varchar | 64 | 是 | 否 | 密码 |
| 4 | 用户组 | varchar | 32 | 否 | 否 | 用户组 |
第五章 系统实现
5.1 普通用户功能实现
5.1.1 登录注册功能实现
普通用户通过提交用户名和密码进行登录验证,系统调用UserController的login方法处理请求。该方法根据用户名、邮箱或手机号查询用户信息,校验密码匹配性后生成Token并存入Redis,最终返回用户数据。注册时调用signUp方法检查用户名唯一性并保存用户记录。登录注册界面如图5-1所示。
图5-1登录注册界面
核心代码实现如下:
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data) {
String username =data.get("username");
String password =data.get("password");
ListresultList=service.selectBaseList(service.select(map, new HashMap<>()));
UserbyUsername= (User)resultList.get(0);
if (byUsername.getPassword().equals(password)) {
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
redisTemplate.opsForValue().set(accessToken.getToken(),accessToken);
}
}
5.1.2 法律资讯查询功能实现
用户通过ArticleController的get_obj方法获取文章详情。系统接收请求参数后构建查询条件,调用service.select方法执行数据库检索,返回文章标题、内容等资讯信息供前端展示。该方法支持按分类筛选,便于用户浏览不同频道的法律资讯。法律资讯查询界面如图5-2所示。
图5-2法律资讯查询界面
核心代码实现如下:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequestrequest) {
Map<String, String> query =validateQuery(request);
Map<String, String> config =service.readConfig(request);
ListresultList=service.selectBaseList(service.select(query, config));
JSONObjectjsonObject= newJSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
}
5.1.3 法律案例查询功能实现
用户访问法律案例模块时,LegalCaseController调用父类BaseController的getList方法实现分页查询。系统解析前端传递的查询参数,服务层根据案例名称、律师姓名等条件构造SQL语句,返回匹配的案例列表。该功能支持模糊搜索,提升查询效率。法律案例查询界面如图5-3所示。
图5-3法律案例查询界面
核心代码实现如下:
@GetMapping("/list")
public Map<String, Object> list(HttpServletRequestrequest) {
Map<String, String> query =service.readQuery(request);
Map<String, String> config =service.readConfig(request);
ListresultList=service.selectBaseList(service.select(query, config));
Long count =service.selectBaseCount(service.count(query, config));
return success(resultList, count);
}
5.1.4 法律文书查询功能实现
LegalDocumentsController的get_list方法处理法律文书查询请求。系统根据用户选择的文书类型、律师姓名等过滤条件构建Map参数,调用服务层select方法检索legal_documents表数据,返回文书名称、附件链接及介绍信息。法律文书查询界面如图5-4所示。
图5-4法律文书查询界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, String> query =service.readQuery(request);
Map<String, String> config =service.readConfig(request);
Listlist=service.selectBaseList(service.select(query, config));
Long count =service.selectBaseCount(service.count(query, config));
return success(list, count);
}
5.1.5 法律咨询功能实现
用户提交咨询内容后,LegalConsultationController的add方法接收请求。该方法调用readBody解析前端参数,创建LegalConsultation实体对象并设置咨询状态为“待回复”,最后执行addEntity持久化存储。律师用户登录后可查看并回复咨询。法律咨询界面如图5-5所示。
图5-5法律咨询界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
LegalConsultationlegal_consultation= newLegalConsultation();
legal_consultation.setUser_consultation(paramMap.get("user_consultation")==null?null:String.valueOf(paramMap.get("user_consultation")));
legal_consultation.setConsultation_status("待回复");
this.addEntity(legal_consultation);
return success(1);
}
5.1.6 律师预约功能实现
ReservedOrderController的add方法实现预约订单创建。系统读取前端传递的律师姓名、预约日期、咨询信息等参数,生成唯一预约订单号,设置订单状态为“待确认”,调用addEntity保存至数据库。预约界面如图5-6所示。
图5-6律师预约界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
ReservedOrderreserved_order= newReservedOrder();
reserved_order.setAppointment_order_number(generateOrderNumber());
reserved_order.setAppointment_status("待确认");
reserved_order.setAppointment_date(parseToTimestamp(String.valueOf(paramMap.get("appointment_date"))));
this.addEntity(reserved_order);
return success(1);
}
5.1.7 急单记录查询功能实现
用户通过OrderRecordController的get_list方法查询接单记录。系统根据当前登录用户的regular_user信息构建查询条件,筛选出关联的预约订单数据,返回订单号、预约日期、接单律师及订单备注等信息,方便用户追踪预约进度。急单记录查询界面如图5-7所示。
图5-7急单记录查询界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, String> query =service.readQuery(request);
query.put("regular_user",String.valueOf(getUserId()));
Map<String, String> config =service.readConfig(request);
ListresultList=service.selectBaseList(service.select(query, config));
return success(resultList);
}
5.1.8 评价反馈功能实现
用户完成咨询后可提交评价。EvaluationFeedbackController的add方法接收评分和反馈内容,关联预约订单号与律师信息,设置评价状态后调用addEntity保存。系统限制同一订单仅可评价一次,保障评价真实性。评价反馈界面如图5-8所示。
图5-8评价反馈界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
EvaluationFeedbackevaluation_feedback= newEvaluationFeedback();
evaluation_feedback.setUser_resights(paramMap.get("user_resights")==null?null:String.valueOf(paramMap.get("user_resights")));
evaluation_feedback.setResight_content(paramMap.get("resight_content")==null?null:String.valueOf(paramMap.get("resight_content")));
this.addEntity(evaluation_feedback);
return success(1);
}
5.2 律师用户功能实现
5.2.1 法律案例管理功能实现
律师通过LegalCaseController的add和set方法管理案例。add方法解析请求参数创建LegalCase实体,设置创建人信息后调用addEntity存储。set方法接收查询条件和更新参数,调用服务层updateEntity完成修改操作。法律案例管理界面如图5-9所示。
图5-9法律案例管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
LegalCaselegal_case= newLegalCase();
legal_case.setCase_name(paramMap.get("case_name")==null?null:String.valueOf(paramMap.get("case_name")));
legal_case.setLawyer_user(paramMap.get("lawyer_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("lawyer_user"))));
this.addEntity(legal_case);
return success(1);
}
5.2.2 法律文书管理功能实现
LegalDocumentsController提供文书的增删改查接口。律师上传文书时,add方法将前端传递的文书名称、类型、附件等信息封装为LegalDocuments对象;set方法根据查询条件定位记录并更新字段内容,操作结果返回给前端提示。法律文书管理界面如图5-10所示。
图5-10法律文书管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequestrequest) throwsIOException{
Map<String,String>queryMap=service.readQuery(request);
Map<String,Object>paramMap=service.readBody(request.getReader());
LegalDocumentslegal_documents= newLegalDocuments();
legal_documents.setLegal_documents(paramMap.get("legal_documents")==null?null:String.valueOf(paramMap.get("legal_documents")));
this.setEntity(queryMap,configMap,legal_documents);
return success(1);
}
5.2.3 律师信息管理功能实现
LawyerInformationController负责律师个人资料的维护。律师可调用set方法修改专长领域、律师简介、封面图片等信息,系统通过readQuery获取待更新记录的主键条件,readBody获取新数据后执行更新。律师信息管理界面如图5-11所示。
图5-11律师信息管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequestrequest) throwsIOException{
Map<String,String>queryMap=service.readQuery(request);
Map<String,Object>paramMap=service.readBody(request.getReader());
LawyerInformationlawyer_information= newLawyerInformation();
lawyer_information.setAreas_of_expertise(paramMap.get("areas_of_expertise")==null?null:String.valueOf(paramMap.get("areas_of_expertise")));
this.setEntity(queryMap,configMap,lawyer_information);
return success(1);
}
5.2.4 法律咨询管理功能实现
律师通过LegalConsultationController的set方法回复用户咨询。系统接收咨询ID作为查询条件,将律师填写的回复内容设置到consultation_reply字段,同时更新咨询状态为“已回复”,调用setEntity完成数据更新。法律咨询管理界面如图5-12所示。
图5-12法律咨询管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequestrequest) throwsIOException{
Map<String,String>queryMap=service.readQuery(request);
Map<String,Object>paramMap=service.readBody(request.getReader());
LegalConsultationlegal_consultation= newLegalConsultation();
legal_consultation.setConsultation_reply(paramMap.get("consultation_reply")==null?null:String.valueOf(paramMap.get("consultation_reply")));
this.setEntity(queryMap,configMap,legal_consultation);
return success(1);
}
5.2.5 预约订单管理功能实现
ReservedOrderController的set方法允许律师修改订单状态。律师根据接单能力将订单状态从“待确认”改为“已确认”,系统解析请求参数后更新appointment_status字段,同时记录接单律师信息。预约订单管理界面如图5-13所示。
图5-13预约订单管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequestrequest) throwsIOException{
Map<String,String>queryMap=service.readQuery(request);
Map<String,Object>paramMap=service.readBody(request.getReader());
ReservedOrderreserved_order= newReservedOrder();
reserved_order.setAppointment_status(paramMap.get("appointment_status")==null?null:String.valueOf(paramMap.get("appointment_status")));
this.setEntity(queryMap,configMap,reserved_order);
return success(1);
}
5.2.6 接单记录管理功能实现
律师确认预约订单后,系统自动生成接单记录。OrderRecordController的add方法在订单状态变更时触发,将订单信息、律师用户ID、普通用户ID等数据封装为OrderRecord实体,调用addEntity存入order_record表供律师查询。接单记录管理界面如图5-14所示。
图5-14接单记录管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
OrderRecordorder_record= newOrderRecord();
order_record.setLawyer_user(paramMap.get("lawyer_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("lawyer_user"))));
order_record.setAppointment_order_number(paramMap.get("appointment_order_number")==null?null:String.valueOf(paramMap.get("appointment_order_number")));
this.addEntity(order_record);
return success(1);
}
5.3 管理员功能实现
5.3.1 法律案例管理功能实现
管理员拥有法律案例的完整管理权限。LegalCaseController中除了add和set方法,还通过继承BaseController获得delete接口。管理员可删除任何违规或不准确的案例,系统根据查询条件执行物理删除操作。法律案例管理界面如图5-15所示。
图5-15法律案例管理界面
核心代码实现如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequestrequest) {
Map<String, String> query =validateQuery(request);
Map<String, String> config =service.readConfig(request);
this.service.delete(query, config);
return success(1);
}
5.3.2 法律文书管理功能实现
管理员通过LegalDocumentsController维护所有律师上传的文书。管理界面支持条件筛选(按类型、律师姓名)和批量删除操作。系统调用delete方法时依据前端传入的id集合,生成对应SQL语句执行删除。法律文书管理界面如图5-16所示。
图5-16法律文书管理界面
核心代码实现如下:
@RequestMapping("/del")
@Transactional
public Map<String, Object> del(HttpServletRequestrequest) {
Map<String, String> query =service.readQuery(request);
Map<String, String> config =service.readConfig(request);
this.service.delete(query, config);
return success(1);
}
5.3.3 律师信息管理功能实现
LawyerInformationController为管理员提供律师信息的审核与编辑功能。管理员可调用set方法修改律师的咨询次数限制、预约次数限制等字段,也可通过del方法下架资质不符的律师账号。律师信息管理界面如图5-17所示。
图5-17律师信息管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequestrequest) throwsIOException{
Map<String,String>queryMap=service.readQuery(request);
Map<String,Object>paramMap=service.readBody(request.getReader());
LawyerInformationlawyer_information= newLawyerInformation();
lawyer_information.setLegal_consultation_limit_times(paramMap.get("legal_consultation_limit_times")==null?null:String.valueOf(paramMap.get("legal_consultation_limit_times")));
this.setEntity(queryMap,configMap,lawyer_information);
return success(1);
}
5.3.4 法律咨询管理功能实现
管理员可查看并监督所有咨询记录。LegalConsultationController的get_list方法支持按咨询状态、律师姓名等条件筛选,管理员还可通过set方法强制关闭不恰当咨询或删除垃圾信息。法律咨询管理界面如图5-18所示。
图5-18法律咨询管理界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, String> query =service.readQuery(request);
Map<String, String> config =service.readConfig(request);
Listlist=service.selectBaseList(service.select(query, config));
Long count =service.selectBaseCount(service.count(query, config));
return success(list, count);
}
5.3.5 预约订单管理功能实现
管理员通过ReservedOrderController管理全平台的预约订单,可查看所有律师的订单列表,对异常订单进行状态修改或删除操作。系统调用set方法时校验管理员权限后执行更新。预约订单管理界面如图5-19所示。
图5-19预约订单管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequestrequest) throwsIOException{
Map<String,String>queryMap=service.readQuery(request);
Map<String,Object>paramMap=service.readBody(request.getReader());
ReservedOrderreserved_order= newReservedOrder();
reserved_order.setAppointment_status(paramMap.get("appointment_status")==null?null:String.valueOf(paramMap.get("appointment_status")));
this.setEntity(queryMap,configMap,reserved_order);
return success(1);
}
5.3.6 接单记录管理功能实现
管理员可审计所有接单记录,确保服务流程合规。OrderRecordController提供分页查询接口,管理员可按律师姓名、用户姓名、预约日期等维度检索记录,并对接单记录执行导出或删除操作。接单记录管理界面如图5-20所示。
图5-20接单记录管理界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, String> query =service.readQuery(request);
Map<String, String> config =service.readConfig(request);
config.put("orderby", "appointment_datedesc");
ListresultList=service.selectBaseList(service.select(query, config));
return success(resultList);
}
5.3.7 评价反馈管理功能实现
EvaluationFeedbackController管理所有用户提交的评价。管理员可查看评价内容、评星等级及关联律师,对于违规评价可调用del方法删除,系统同时更新对应律师的平均评分数据。评价反馈管理界面如图5-21所示。
图5-21评价反馈管理界面
核心代码实现如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequestrequest) {
Map<String, String> query =validateQuery(request);
Map<String, String> config =service.readConfig(request);
this.service.delete(query, config);
return success(1);
}
5.3.8 资源管理功能实现
资源管理包含轮播图、公告和文章类型配置。SlidesController的add方法设置首页轮播图,NoticeController管理平台公告发布,ArticleTypeController维护文章频道分类。这些资源通过BaseController的通用方法实现增删改查。资源管理界面如图5-22所示。
图5-22资源管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequestrequest) throwsIOException{
Slidesslides=convertRequestBodyToObject(request);
validateObject(slides);
this.addEntity(slides);
return success(1);
}
第六章 系统测试
6.1 测试目的
系统测试就是检验法律咨询服务平台功能实现是否符合需求规格说明书所规定的要求。测试过程中主要针对业务逻辑进行正确的验证,保证各个用户的操作都可以按照预期的数据流进行。边界条件测试包含输入字段长度限制、必填项校验等各方面内容,检验系统对于异常输入情况所给出的提示是否友善。前后端数据一致性验证指的是用户操作之后,界面所显示出来的状态要和数据库中实际存储的状态一致。权限控制测试结果是普通用户不能使用律师功能,律师不能使用管理员功能,会话过期后需要重新登录。经过系统的测试可以发现开发过程中存在的逻辑错误以及数据校验漏洞[19]。
6.2 测试方法
系统测试使用黑盒测试的方法,测试用例按照功能需求文档来编写,不涉及内部代码的实现逻辑。功能测试覆盖了所有的用例图所描述的用户操作路径,即正常的和异常的操作。集成测试验证前后端接口的数据传输是否正确,用Postman工具模拟客户端发送HTTP请求,检验响应结果。数据库测试验证增删改查操作之后数据表记录的变化是否符合预期,外键约束、唯一约束是否生效。浏览器兼容性测试使用Chrome、Firefox等主流浏览器进行,在浏览器中测试页面渲染、交互功能是否正常[20]。回归测试就是每次修复缺陷之后,再对相关的功能模块进行测试用例的运行,以防止由于修改而产生新的问题。
6.3 测试用例
(1)法律咨询功能测试如表6-1所示
表6-1法律咨询功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 提交咨询 | 用户填写咨询内容并提交 | 生成咨询记录状态为待回复 | 符合预期 |
| 律师回复 | 律师查看咨询并填写回复 | 咨询状态更新为已回复 | 符合预期 |
| 敏感词过滤 | 用户提交包含敏感词的咨询 | 系统拦截并提示违规 | 符合预期 |
(2)律师预约功能测试如表6-2所示
表6-2律师预约功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 发起预约 | 用户选择律师并填写预约信息 | 生成预约订单状态为待处理 | 符合预期 |
| 律师接单 | 律师确认接单操作 | 订单状态更新为已接单 | 符合预期 |
| 日期校验 | 用户选择过去日期提交预约 | 系统提示日期无效 | 符合预期 |
(3)法律案例管理功能测试如表6-3所示
表6-3法律案例管理功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 发布案例 | 律师填写案例信息并提交 | 案例进入待审核状态 | 符合预期 |
| 审核通过 | 管理员审核通过该案例 | 案例状态变为已发布 | 符合预期 |
| 案例删除 | 律师执行删除操作 | 案例从列表中消失 | 符合预期 |
(4)用户登录功能测试如表6-4所示
表6-4用户登录功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 正常登录 | 输入正确用户名密码 | 跳转到对应角色主页 | 符合预期 |
| 密码错误 | 输入错误密码登录 | 提示用户名或密码错误 | 符合预期 |
| 账号冻结 | 被冻结账号尝试登录 | 提示账号已被冻结 | 符合预期 |
(5)评价反馈功能测试如表6-5所示
表6-5评价反馈功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 提交评价 | 用户填写评价内容并提交 | 评价进入待审核状态 | 符合预期 |
| 审核评价 | 管理员审核通过评价 | 评价在律师页面展示 | 符合预期 |
| 恶意评价 | 用户提交违规评价内容 | 评价被管理员隐藏 | 符合预期 |
测试结论
经过三轮测试之后,法律咨询服务平台的主要功能模块都可以正常使用。测试用例包含普通用户进行的法律咨询、律师进行的预约、律师案例的管理、订单的处理、管理员进行审核的全部业务流程,所有测试用例的执行结果均达到预期的目的。边值测试结果表明输入字段长度的限制功能可以正常工作,前端表单校验以及后端校验都可以对数据的有效性进行保证。权限控制测试可以保证不同的用户只能访问自己权限范围内页面,直接访问会触发控制。会话管理机制在超时之后可以正确的跳转到登录页面。系统达到预期的设计目标后,就可以进行部署上线。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/m0_73244011/article/details/164727300




