尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SpringCloud+Layui+AI:智能政务微服务审批系统开发实践

SpringCloud+Layui+AI:智能政务微服务审批系统开发实践 1. 项目背景与系统概述在政务信息化持续升级的背景下越来越多的行政审批业务从传统线下窗口转移到线上平台。一套完整的审批系统往往涉及用户管理、事项申报、材料上传、流程审批、结果反馈等多个环节。同时开发者在毕业设计或企业实训中也希望引入微服务架构来提升系统的扩展性和可维护性而不是把所有功能写在一个单体应用里。本文围绕“基于 SpringCloud Layui AI 的智能政务微服务审批管理系统”这一题目完整拆解一套可用于毕业设计、课程设计或个人练手的项目方案。整个系统采用 SpringCloud 微服务架构作为后端骨架使用 Layui 构建后台管理界面并接入 AI 大模型实现审批意见辅助生成、材料审核要点提示、智能问答等功能。通过本文你可以掌握以下核心能力理解政务审批类系统的业务模块划分和流程设计。掌握 SpringCloud 微服务项目的工程搭建思路包括服务注册、网关路由、服务间调用。掌握 Layui 表格渲染、表单提交、弹窗操作与后端接口的对接方式。了解如何把 AI 大模型封装为独立微服务并嵌入已有业务流程。学会整理毕设论文结构、答辩要点和项目演示方案。需要提前说明的是本文并不会把一整份完整的毕业设计源码全部粘贴出来而是以“核心模块 关键代码 工程思路”的方式展开。这样做的目的是让你能理解系统的每一部分是如何工作的即使换成其他业务也能按同样的思路完成开发。2. 技术选型与整体架构设计2.1 为什么选 SpringCloud 微服务架构政务审批类系统的业务边界比较清晰天然适合按业务域拆分成多个独立服务。比如用户服务负责账号登录、权限校验。事项服务负责审批事项的配置和管理。申报服务负责用户提交申报单。审批服务负责审批流程的推进和审批记录维护。消息服务负责站内信、短信通知等异步消息。AI 服务负责调用大模型接口生成审批意见或回答业务问题。如果所有逻辑写在一个 Spring Boot 单体项目中开发初期确实更快但随着页面增多、接口变多代码的耦合度会明显上升。微服务方案的优点在于每个服务可以独立开发、独立部署也方便在毕业设计讲解时突出“架构设计能力”和“工程化思维”。SpringCloud 是目前最主流的微服务技术栈之一它解决了服务注册发现、远程调用、负载均衡、熔断降级、统一网关等关键问题。对于毕业设计来说使用 SpringCloud Alibaba 生态Nacos 注册中心是常见且稳妥的选择。2.2 Layui 在前端中的定位Layui 是一套经典的后台管理 UI 框架它依赖轻、上手快不需要复杂的 Node 工程链。对于偏后端的学生玩家来说Layui 比 Vue Element 更友好因为可以直接在 HTML 页面中引入 layui.js 和 layui.css通过模块化方式使用表格、表单、弹窗、日期选择器等组件。在智能政务审批管理系统中使用 Layui 可以快速完成以下页面登录页与主页框架。用户管理列表页。审批事项配置页。审批列表与详情页。材料上传页面。AI 智能辅助问答面板。Layui 的 table 模块支持服务端分页通过指定 url 即可自动请求后端接口并渲染数据form 模块支持表单自定义校验layer 弹层组件适合做详情弹窗和确认操作。2.3 AI 大模型在系统中的角色AI 大模型在政务审批系统里可以有多种落地方式。常见的设计是将 AI 能力封装成独立服务业务服务通过 HTTP 或消息队列调用它避免在每一个业务代码中直接嵌入模型接口调用。本项目中的 AI 服务主要承担三个任务审批意见智能生成根据审批事项类型、申报材料描述、历史审批记录生成一段规范的审批意见草稿。材料审核要点提示根据用户上传的材料类型输出需要重点核验的材料字段和常见问题。智能问答助手面向办事人和窗口工作人员提供政策流程等常见问题的自动问答。需要注意的是在当前毕业设计阶段AI 服务可以直接调用官方大模型 API也可以用一个 Mock 实现来演示效果。如果是在本地没有网络的环境中答辩建议准备一个兜底方案用预设的规则或模板返回结构化结果保证演示稳定。2.4 系统整体架构图下面用文字描述系统的整体调用链路方便你在写论文时绘制架构图。┌────────────────────────────────────────────────┐ │ 浏览器端 │ │ Layui 后台管理界面HTML JS CSS │ └────────────────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────┐ │ SpringCloud Gateway 网关 │ │ 路由分发 / 统一鉴权 / 跨域处理 │ └────────────────────────────────────────────────┘ │ │ │ │ ▼ ▼ ▼ ▼ 用户服务 事项服务 申报服务 审批服务 │ │ │ │ └──────────┼───────────┼───────────┘ ▼ ▼ 消息服务 AI 大模型服务从调用链路上看浏览器端发起请求后首先经过网关层由网关将请求路由到对应的微服务。AI 服务不直接暴露给前端而是由审批服务或申报服务在内部调用。3. 环境准备与项目工程搭建3.1 开发环境说明不同电脑的环境可能有所差异本文以常见配置为例进行说明重点展示工程思路实际搭建时请根据本机环境灵活调整。建议使用的开发环境如下软件推荐版本说明JDKJDK 1.8 或 JDK 17SpringCloud 版本不同对 JDK 要求不同Maven3.6依赖管理与项目构建MySQL5.7 或 8.0主业务数据库Redis5.x缓存与分布式会话可选Nacos2.x服务注册与配置中心IDEA任意较新版本后端开发 IDENode.js不需要Layui 不需要 Node 环境如果是第一次接触 SpringCloud建议先安装一个 Nacos 并独立启动再开始写业务代码。Nacos 启动后默认访问地址是http://localhost:8848/nacos控制台默认账号密码均为nacos。3.2 整体工程结构采用 Maven 多模块结构每个微服务独立一个 Maven Module。这里给出一个适合毕业设计的目录结构smart-approval ├── pom.xml // 父工程管理依赖版本 ├── sql // 初始化脚本 │ └── smart_approval.sql ├── common // 公共模块 │ ├── common-core // 通用返回结果、异常处理、工具类 │ └── common-redis // Redis 配置可选 ├── gateway // 网关服务 ├── system-service // 用户与权限服务 ├── matter-service // 审批事项服务 ├── apply-service // 申报服务 ├── approval-service // 审批服务 ├── message-service // 消息服务 └── ai-service // AI 大模型服务每个服务内部再按照controller、service、mapper、entity、dto分包。这样结构清晰也方便写论文时描述系统分层。3.3 父工程核心依赖父工程的pom.xml中最重要的是统一管理 Spring Boot 版本和 SpringCloud Alibaba 版本。不同版本组合差异较大实际使用时请以 SpringCloud Alibaba 官方版本说明为准。下面给出一个常见的依赖管理示例!-- 文件路径smart-approval/pom.xml -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.7.18/version relativePath/ /parent properties spring-cloud.version2021.0.8/spring-cloud.version spring-cloud-alibaba.version2021.0.5.0/spring-cloud-alibaba.version /properties dependencyManagement dependencies dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version${spring-cloud.version}/version typepom/type scopeimport/scope /dependency dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version${spring-cloud-alibaba.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement这里的版本号是示例使用时一定要检查官方文档中的版本兼容矩阵。如果自己的 Maven 仓库下载不到某些依赖可以优先考虑换一个稳定版本组合。4. 核心功能模块设计与代码实现4.1 数据库表结构设计智能政务审批管理系统至少需要包含以下几张核心表。这里给出核心字段说明完整的建表 SQL 你需要根据自己的业务细化。表名说明关键字段sys_user用户表id, username, password, real_name, role_idsys_role角色表id, role_name, role_codematter_info审批事项表id, matter_code, matter_name, category, need_aiapply_form申报单表id, apply_no, user_id, matter_id, status, create_timeapproval_record审批记录表id, apply_id, approver_id, opinion, result, create_timematerial_file材料文件表id, apply_id, file_name, file_url, verify_status需要注意的是在真正开发时不要把大量业务字段堆在同一张表中而是按照服务边界拆分。例如用户信息、角色、菜单放在系统服务对应的数据库中审批事项放在事项服务对应的数据库中。每个服务维护自己的表服务之间不要直接操作对方的表而是通过接口调用。4.2 注册中心 Nacos 配置以approval-service为例核心配置文件bootstrap.yml或application.yml中需要配置应用名称和 Nacos 注册地址# 文件路径approval-service/src/main/resources/application.yml server: port: 8084 spring: application: name: approval-service cloud: nacos: discovery: server-addr: 127.0.0.1:8848 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/smart_approval?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai username: root password: 123456 mybatis-plus: mapper-locations: classpath*:mapper/*.xml configuration: map-underscore-to-camel-case: true配置完成后启动服务在 Nacos 控制台的服务列表页面中就能看到approval-service已经注册成功。4.3 网关服务配置网关服务是前端访问的统一入口。需要配置路由规则让不同前缀的请求转发到不同微服务# 文件路径gateway/src/main/resources/application.yml server: port: 8080 spring: application: name: gateway-service cloud: nacos: discovery: server-addr: 127.0.0.1:8848 gateway: routes: - id: system-service uri: lb://system-service predicates: - Path/api/system/** - id: matter-service uri: lb://matter-service predicates: - Path/api/matter/** - id: apply-service uri: lb://apply-service predicates: - Path/api/apply/** - id: approval-service uri: lb://approval-service predicates: - Path/api/approval/** - id: ai-service uri: lb://ai-service predicates: - Path/api/ai/** discovery: locator: enabled: true这里lb://表示通过服务发现后的负载均衡地址访问。前端统一访问http://localhost:8080/api/xxx即可完全不需要关心后端服务的具体端口。4.4 审批服务核心接口实现审批服务是整个系统的核心。下面给出一个查询审批待办列表的 Controller 示例使用 MyBatis-Plus 简化数据访问。// 文件路径approval-service/src/main/java/com/example/approval/controller/ApprovalController.java RestController RequestMapping(/api/approval) public class ApprovalController { Resource private ApprovalRecordService approvalRecordService; /** * 分页查询待办审批记录 */ GetMapping(/pending) public ResultPageApprovalRecordVO pendingList( RequestParam(defaultValue 1) Integer pageNum, RequestParam(defaultValue 10) Integer pageSize, RequestParam(required false) Long approverId) { PageApprovalRecordVO page approvalRecordService.queryPending(pageNum, pageSize, approverId); return Result.success(page); } /** * 提交审批结果 */ PostMapping(/submit) public ResultVoid submit(RequestBody ApprovalSubmitDTO dto) { approvalRecordService.submitApproval(dto); return Result.success(); } }在ApprovalRecordService的实现类中需要完成三件事保存审批记录。更新申报单状态。调用 AI 服务生成审批意见或调用消息服务发送通知。这里我把业务逻辑分层写在 Service 中而不是全部堆在 Controller 里这一设计在毕业设计评委眼中是一个加分项。4.5 AI 服务与大模型接口接入AI 服务单独作为一个微服务内部封装对大模型 API 的调用。为了让答辩演示更稳定建议在 AI 服务中先写一个本地决策方法再对接真实模型。// 文件路径ai-service/src/main/java/com/example/ai/service/AiAssistService.java Service public class AiAssistService { /** * 生成审批意见草稿 * * param matterName 审批事项名称 * param applyDesc 申报描述 * return 意见草稿 */ public String generateOpinion(String matterName, String applyDesc) { // 方案一调用真实大模型 API // String prompt 你是一名政务审批助手请根据以下信息生成审批意见...; // return callLlmApi(prompt); // 方案二本地兜底模板离线可运行 if (matterName.contains(营业执照)) { return 经审核申请材料齐全符合办理条件拟同意办理。; } if (matterName.contains(食品)) { return 经审核食品经营许可申请材料基本齐全需补充现场核查情况。; } return 经审核材料已提交请审批人员进一步核对原件。; } }在真实大模型接入时一般通过 HTTP 接口调用把构造好的提示词发送给模型然后把返回内容解析后存储到审批记录中。// 文件路径ai-service/src/main/java/com/example/ai/service/AiService.java核心片段 public String callLlmApi(String prompt) { // 这里使用 HttpClient 或 RestTemplate 调模型接口 // 需要配置 apiKey、model 名称、请求超时时间等 // 由于不同平台接口差异较大实际参数按官方文档调整 return 模型返回的文本内容; }需要注意在工程化的项目里API Key 绝对不能写死在代码中应放到 Nacos 配置中心或环境变量里并通过Value读取。4.6 Feign 服务间调用示例审批服务需要调用 AI 服务可以使用 SpringCloud OpenFeign 来简化远程调用。首先在审批服务中添加依赖dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-openfeign/artifactId /dependency然后定义一个 Feign 客户端接口// 文件路径approval-service/src/main/java/com/example/approval/feign/AiServiceClient.java FeignClient(name ai-service, path /api/ai) public interface AiServiceClient { GetMapping(/opinion) String generateOpinion(RequestParam(matterName) String matterName, RequestParam(applyDesc) String applyDesc); }在审批服务启动类上加上EnableFeignClients注解// 文件路径approval-service/src/main/java/com/example/approval/ApprovalApplication.java SpringBootApplication EnableFeignClients public class ApprovalApplication { public static void main(String[] args) { SpringApplication.run(ApprovalApplication.class, args); } }这样审批服务中就可以通过注入AiServiceClient来调用 AI 服务。主业务代码不需要关心底层 HTTP 请求逻辑代码可读性和可维护性都更好。5. Layui 前端页面与接口对接5.1 首页布局与菜单Layui 的前端页面通常由一个主页框架和多个内嵌页面组成。主页使用layui-layout-admin布局左侧菜单绑定跳转事件。这里给出一个简化的菜单渲染思路!-- 文件路径src/main/resources/static/index.html 核心片段 -- ul classlayui-nav layui-nav-tree lay-filtersideMenu li classlayui-nav-item a hrefjavascript:;>// 文件路径src/main/resources/static/pages/approval.html 中的 script 片段 layui.use([table, layer], function () { var table layui.table; var layer layui.layer; table.render({ elem: #approvalTable, url: /api/approval/pending, method: get, page: true, cols: [[ { field: applyNo, title: 申报编号, width: 200 }, { field: matterName, title: 审批事项 }, { field: applyUser, title: 申报人, width: 120 }, { field: applyTime, title: 申报时间, width: 180 }, { field: status, title: 状态, width: 100, templet: function (d) { if (d.status 1) { return span stylecolor:orange;待审批/span; } return span stylecolor:green;已办结/span; } }, { title: 操作, width: 150, templet: function (d) { return a classlayui-btn layui-btn-sm lay-eventdetail详情/a; } } ]], done: function (res) { // 数据加载完成后的回调 } }); });Layui 会自动把返回数据中count字段作为总数把data字段渲染到表格中。所以后端统一返回结果结构建议设计成{ code: 200, message: success, data: { total: 20, list: [] } }为了让 Layui 能正常识别分页可以在后端统一将数据包装成这个结构也可以在table.render中通过parseData回调做字段解析。5.3 使用 layer 弹窗完成审批操作当审批人员点击“详情”按钮时通常需要弹出一个表单或详情页面。使用 layer 打开一个 iframe 页面并传递当前行数据table.on(tool(approvalTable), function (obj) { var data obj.data; if (obj.event detail) { layer.open({ type: 2, title: 审批详情, area: [800px, 600px], content: approvalDetail.html?applyNo data.applyNo }); } });在审批详情页中使用layui.form渲染审批意见表单点击提交后通过 Ajax 把数据 POST 到后端接口。// 文件路径src/main/resources/static/pages/approvalDetail.html 中的 script 片段 layer.load(2); $.ajax({ url: /api/approval/submit, type: POST, contentType: application/json, data: JSON.stringify({ applyNo: applyNo, opinion: $(#opinion).val(), result: 1 }), success: function (res) { if (res.code 200) { layer.msg(审批成功); // 关闭当前弹窗并刷新父页面表格 parent.layer.closeAll(); parent.layui.table.reload(approvalTable); } else { layer.msg(res.message, { icon: 2 }); } }, error: function () { layer.msg(请求失败请检查网络, { icon: 2 }); } });这里体现了“表单收集数据 → Ajax 提交后端 → 后端处理 → 刷新列表”的完整闭环也是评审老师最关注的一条主流程。6. 系统运行与验证6.1 启动顺序由于项目包含多个微服务启动顺序很重要。建议按以下顺序启动启动 MySQL并执行smart_approval.sql初始化脚本。启动 Nacos 注册中心确保访问http://localhost:8848/nacos正常。启动 Redis如果使用。启动system-service。启动matter-service。启动apply-service。启动approval-service。启动ai-service。启动gateway-service。6.2 验证接口是否通畅启动完所有服务后可以在浏览器直接访问网关地址验证路由是否生效。例如http://localhost:8080/api/approval/pending?pageNum1pageSize10如果网关路由配置正确并且审批服务已注册到 Nacos会返回 JSON 格式的审批列表数据。如果返回 404可以从以下方向排查确认服务是否已经注册到 Nacos。确认网关服务中路由前缀与后端 Controller 的 RequestMapping 前缀是否匹配。确认是否使用了lb://且服务名大小写正确。查看网关服务日志中是否有路由匹配记录。6.3 演示建议毕业设计答辩时建议提前准备一份演示脚本按流程走一遍登录管理员账号。进入“审批事项”页面添加一条新的审批事项。进入“申报管理”页面模拟用户提交一条申报单。进入“审批中心”看到新申报进入待审批列表。点击详情让 AI 生成审批意见草稿。提交审批结果确认列表状态变化。进入 AI 智能问答页面演示政策问答功能。这个演示流程覆盖了系统主要功能也体现了前后端联动和数据流转过程。7. 常见问题与排查思路7.1 服务启动失败问题现象常见原因解决思路启动时报端口被占用上一个服务实例未关闭杀掉占用进程或修改端口号Nacos 连接超时Nacos 未启动或地址配置错误先启动 Nacos确认控制台可访问数据库连接失败MySQL 未启动或账号密码错误检查 MySQL 服务与配置文件服务启动成功但无法注册bootstrap.yml 配置缺失确认使用了正确的配置文件名和 nacos 地址7.2 前端表格不显示数据Layui table 渲染后页面出现“无数据”或一直加载中通常是因为后端返回结构不符合 Layui 的默认解析规则。解决方法是在table.render中增加parseData回调parseData: function (res) { return { code: res.code 200 ? 0 : res.code, msg: res.message, count: res.data.total, data: res.data.list }; }7.3 AI 接口调用不稳定AI 大模型 API 通常存在响应时间波动这会影响审批体验。建议在 AI 服务中设置超时时间和重试机制并在前端增加 loading 提示。更稳妥的方式是使用异步任务审批人员点击“生成意见”后前端先提交任务后端处理完成后回调或轮询结果。如果答辩现场网络不可用一定要准备本地兜底逻辑否则整个 AI 亮点功能会直接失效。7.4 网关跨域问题前端页面如果不在网关同源下访问会碰到跨域问题。可以在网关配置中增加全局跨域处理spring: cloud: gateway: globalcors: cors-configurations: [/**]: allowedOriginPatterns: * allowedMethods: * allowedHeaders: * allowCredentials: true注意允许全部来源的配置仅适合开发环境生产环境需要设置明确的域名白名单。7.5 数据库事务问题审批提交操作涉及“保存审批记录”和“更新申报状态”两步如果中途任何一个步骤失败会导致数据不一致。需要在 Service 方法上增加事务注解Transactional(rollbackFor Exception.class) public void submitApproval(ApprovalSubmitDTO dto) { // 1. 保存审批记录 // 2. 更新申报单状态 // 3. 发送通知消息 }同时要注意如果方法中调用了 Feign 远程服务Feign 的调用不会继承本地数据库事务远程调用失败时只能通过手动补偿或记录失败状态来保证最终一致。8. 工程实践与论文写作建议8.1 合理设计返回结果类所有接口统一返回一个 Result 对象会让前端对接变得非常轻松。建议定义泛型返回类// 文件路径common/common-core/src/main/java/com/example/common/Result.java public class ResultT { private Integer code; private String message; private T data; public static T ResultT success(T data) { ResultT result new Result(); result.code 200; result.message success; result.data data; return result; } public static T ResultT error(String message) { ResultT result new Result(); result.code 500; result.message message; return result; } // 省略 getter/setter }8.2 配置管理与密钥保护AI 模型 API Key、数据库密码等敏感信息不应写死在代码里。在毕业设计中至少要做到使用 Nacos 配置中心集中管理配置。本地开发时使用application-dev.yml和application-prod.yml区分环境。答辩演示时使用测试账号避免暴露真实密钥。8.3 权限与安全边界政务审批系统对权限要求较高。虽然毕业设计不必做到企业级完整方案但至少要有“用户登录 角色判断 接口鉴权”的意识。可以基于 JWT 实现简单的登录状态管理用户登录后返回 Token网关统一校验 Token 是否有效有效后才放行请求。后续接口中通过用户上下文获取当前操作人信息而不是每个接口都让前端传入用户 ID。8.4 日志与审计审批操作属于敏感操作必须记录日志。建议在审批提交等关键接口中记录以下内容操作人账号。操作时间。请求参数。业务结果。AI 生成的原始意见和最终审批意见。这样在论文中写“系统设计了完整的操作审计机制”时也有具体支撑。8.5 论文章节建议如果这个项目用于毕业设计论文可以参考以下章节结构第一章 绪论介绍政务审批背景、研究意义、国内外现状。第二章 相关技术介绍 SpringCloud、Layui、AI 大模型、MySQL、Redis。第三章 系统需求分析功能性需求、非功能性需求、用例图。第四章 系统设计架构设计、功能模块设计、数据库设计、接口设计。第五章 系统实现每个核心模块的实现过程与关键代码。第六章 系统测试功能测试、性能测试、测试用例与结果。第七章 总结与展望。论文写作时不要把代码粘贴太多重点是写清楚设计思路和实现过程并在关键位置配流程图、时序图和数据库关系图。9. 总结与后续扩展从项目构思到代码实现这个“基于 SpringCloud Layui AI 的智能政务微服务审批管理系统”覆盖了微服务架构设计、后台管理前端开发、AI 能力集成、团队协作规范等多个重要知识点。如果你完整走一遍开发流程收获的不只是一份毕设源码更是一套完整的工程化思维方式。在后续扩展方向上可以考虑以下几条路径引入消息队列 RabbitMQ 或 RocketMQ把审批通知改造为异步消息降低接口响应时间。引入分布式事务框架 Seata解决跨服务调用的数据一致性问题。增加智能公文关联推荐利用同一批 AI 服务能力分析历史审批数据。前端升级为 Vue3 Element Plus与当前主流企业后台技术栈对齐。增加可视化大屏展示审批量、办结率、平均审批时长等指标提升系统展示效果。如果你正在做这个课题建议优先把主流程跑通再逐步增加 AI 和大屏等亮点功能。先把基础架构搭建好、核心审批闭环走通后面的扩展会顺利很多。如果本文对你的毕业设计或项目开发有帮助可以收藏备用。也欢迎把你在开发中遇到的问题写在评论区我后续会继续补充这方面的实战内容。
返回列表