FEATURED · 精选文章

SpringCloud+Layui+AI:智能政务微服务审批系统设计与实现

发布时间 / 2026/9/1 13:17:01
来源 / 创域科博编辑部
栏目 / 资讯中心
SpringCloud+Layui+AI:智能政务微服务审批系统设计与实现 每年毕设季节技术社区里都会出现大量同类求助自己做的管理系统被老师评价“没有技术含量”或者答辩时被评委追问两句就答不上来。最常见的作品形态是 Spring Boot MyBatis 一套后台模板功能是增删改查论文里写满“高内聚低耦合”但代码一打开所有业务逻辑都堆在 Service 里。这里有一个非常现实的问题评委早就看腻了纯 CRUD。他们想看的是你有没有理解“系统”这两个字——模块怎么拆、服务怎么通信、数据怎么流转、业务异常怎么兜底。而“智能政务微服务审批管理系统”这个题目恰好把三个高频关键词放在了一起SpringCloud、Layui、AI。它不是简单叠加而是每个技术都能落在业务上微服务管审批链路Layui 管后台界面AI 管审批辅助。这篇文章就以这套项目为基础完整拆解它的架构设计、核心代码、AI 接入方式和排错经验。不管你是要拿它做毕业设计还是想系统学习 SpringCloud 微服务 Layui 后台 AI 接口调用怎么落地都可以照着走通。文中代码采用常见开源版本组合具体版本号请以实际运行环境为准。1. 这篇文章真正要解决的问题先说结论这套系统的价值不是“用了 AI”这三个字而是把 AI 放在审批链路里一个“不抢主流程、但真实提效”的位置。现在很多毕设题目都带“智能”二字但大部分所谓智能处理只是关键词匹配或者写死几条 if-else 规则。评委只要问一句“你的智能体现在哪个模块、用了什么模型、服务挂了怎么降级”基本就答不上来。而审批管理系统本身是非常经典的业务场景天然适合微服务拆分认证授权可以拆出来做独立服务审批核心链路需要单独部署、保护AI 辅助审批是典型的“旁路增强”可以单独做成一个服务接入大模型 API前端用 Layui 这类后台模板开发效率高也符合政务管理系统的视觉习惯。这个选题能覆盖的技术点非常密集服务注册发现、配置中心、网关路由、JWT 鉴权、状态机设计、前端表格渲染、AI 接口调用、异常兜底。任何一个点都值得写进论文也都能在答辩时展开。读者读完这篇文章至少能获得三个能力第一把 SpringCloud 微服务从“会跑通 demo”提升到“能按业务拆分服务”第二把 Layui 后台从“套模板改页面”提升到“真正调接口渲染数据”第三把 AI 从“概念”变成“可演示的功能”并且在非主流程上做得安全可控。2. 需求分析先把审批业务边界定清楚做系统之前很多人容易犯一个错误上来就建表、就写代码结果做到一半发现业务逻辑对不上。审批管理系统虽然常见但还是要先把“审批”这件事本身拆明白。2.1 典型业务角色政务审批系统里一般有四类角色对应四条完全不同的操作链路角色主要操作关注点申请人提交申请、查看进度、补正材料流程透明、状态可查审批员查看待办、审核材料、填写意见信息完整、效率高部门负责人二级审批、驳回、退回有依据、可追溯系统管理员用户管理、角色权限、字典配置权限准确、操作留痕在微服务设计里用户和权限属于基础服务审批属于核心业务服务AI 辅助属于增值服务。服务边界从业务角色这里就已经能看出来。2.2 审批状态机审批单最核心的字段是状态。不要用随便几个字符串表示建议设计成明确的状态枚举草稿DRAFT待审批PENDING审批中APPROVING已通过APPROVED已驳回REJECTED已退回RETURNED已撤销CANCELED这里需要区分“驳回”和“退回”。驳回通常是材料不符合要求流程终止退回是让申请人补充材料后再提交流程回到待审批前。这个区别在业务上很重要也是论文里可以写的业务理解点。2.3 功能模块划分对应的功能模块可以拆成用户认证模块登录、退出、Token 刷新权限管理模块角色分配、菜单权限、数据权限审批业务模块申请提交、审批流转、已办/待办、查询统计AI 辅助模块智能摘要、审批意见草稿、风险提示系统管理模块字典管理、日志管理、参数配置。这些业务能力正好映射成后端的微服务模块而不是把所有接口都塞进一个工程里。3. 技术架构SpringCloud、Layui、AI 是如何协作的很多同学学 SpringCloud 时只学了注册中心和 Feign并不清楚网关、配置中心、认证服务各自解决什么问题。这里先把整体架构理清楚。3.1 服务拆分本系统按业务能力拆成五个 modulegateway-service统一入口负责路由转发、跨域处理、Token 校验过滤器auth-service认证服务负责登录、用户查询、JWT 签发和校验approval-service审批服务负责审批单、流程状态流转、材料上传记录ai-serviceAI 服务对外封装大模型 API只暴露业务化接口common公共工具模块包含统一返回结构、异常处理、JWT 工具、分页参数等。为什么要拆出 ai-service因为审批核心链路不能受制于外部 API 的响应速度。AI 服务如果超时不能拖垮审批申请主流程。这个设计本身就是一个很好的架构决策答辩时可以直接讲。3.2 前后端交互方式Layui 是一套经典的后台 UI 框架它和 Vue 单页应用最大的区别是Layui 更适合“多页面 jQuery Ajax”的模式不需要构建工具直接引入 JS 和 CSS 文件就能用。对毕业设计来说Layui 的学习成本和演示成本都更低。前端通过 Ajax 请求网关地址/api/**网关再转发到具体服务。整个过程是浏览器Layui 页面 ↓ Ajax携带 Token SpringCloud Gateway网关鉴权过滤器 ↓ 路由 auth-service / approval-service / ai-service ↓ MySQL / Redis / 大模型 API这个链路简单清晰也完全符合 SpringCloud 微服务的标准交互方式。3.3 关键技术版本选择从稳定性和兼容性出发推荐使用JDK 8 或 JDK 17Spring Boot 2.7.xSpring Cloud 2021.xSpring Cloud Alibaba 2021.xNacos 2.xMySQL 8.xRedis 6.xLayui 2.8。如果你想用 Spring Boot 3.x就需要对应 Spring Cloud 2022 和 Spring Cloud Alibaba 2022JDK 也要求 17 以上。版本组合不是越新越好核心原则是“Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者必须匹配同一套版本矩阵”否则启动阶段就会遇到依赖冲突。4. 环境准备与项目初始化开始写代码之前最好先把环境准备好。我建议准备一台至少 16G 内存的电脑因为 Nacos、MySQL、Redis、多个微服务同时启动8G 内存会非常吃力。4.1 环境清单组件用途版本建议JDKJava 运行环境8 或 17Maven依赖管理3.6MySQL业务数据库8.xRedis缓存与 Token 存储6.xNacos注册中心 配置中心2.xLayui前端框架2.8以上版本不是固定选项关键是各个组件之间能匹配。这一点会在第 8 章的常见问题表格里专门说明。4.2 创建父工程先创建一个 Maven 父工程把所有子模块聚合在一起。父工程的 pom.xml 大致如下!-- 文件路径pom.xml -- ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.7.18/version relativePath/ /parent groupIdcom.smartgov/groupId artifactIdgov-approval-system/artifactId version1.0.0/version packagingpom/packaging modules modulecommon/module modulegateway-service/module moduleauth-service/module moduleapproval-service/module moduleai-service/module /modules properties java.version8/java.version spring-cloud.version2021.0.9/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 /project注意spring-cloud-alibaba.version需要你仔细确认与你使用的 Spring Boot 版本兼容。上面的版本组合是常见稳定组合但如果你的 Nacos 或 Spring Boot 不完全一致请以官方版本矩阵为准。4.3 创建公共模块common 模块不适合放业务代码它放的是每个服务都要用到的基础能力统一返回结果ResultT统一异常处理GlobalExceptionHandlerJWT 工具类分页请求和响应结构。这些内容看似简单但是微服务里最容易出现“重复造轮子”的地方。如果没有把公共代码抽出来一旦后端接口的返回结构不统一前端 Layui 的 table 解析数据就会非常痛苦。5. 后端核心服务实现这一节是代码量最大的部分。每个服务只展示最关键的文件完整工程请按模块结构补充其余内容。5.1 auth-service登录与 JWT 签发登录接口的核心逻辑是校验账号密码生成 Token并支持通过 Redis 控制 Token 失效。下面是 JWT 工具类的简化实现// 文件路径common/src/main/java/com/smartgov/common/util/JwtUtil.java package com.smartgov.common.util; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; import java.util.List; public class JwtUtil { private static final String SECRET smart-gov-approval-jwt-secret-key-please-change; private static final long EXPIRE_MILLIS 24 * 60 * 60 * 1000L; public static String createToken(String username, Long userId, ListString roles) { return Jwts.builder() .claim(userId, userId) .claim(roles, roles) .setSubject(username) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() EXPIRE_MILLIS)) .signWith(SignatureAlgorithm.HS256, SECRET) .compact(); } public static Claims parseToken(String token) { return Jwts.parser() .setSigningKey(SECRET) .parseClaimsJws(token) .getBody(); } }这里真正要注意的是密钥不要写在代码里。演示时可以直接写但如果要提交到 Git 仓库更推荐通过配置中心下发或者使用环境变量注入。你可以在答辩时主动提一句“生产环境密钥应放在配置中心或环境变量中”这比代码写得花里胡哨更让人信服。认证服务的登录接口// 文件路径auth-service/src/main/java/com/smartgov/auth/controller/AuthController.java package com.smartgov.auth.controller; import com.smartgov.auth.dto.LoginDTO; import com.smartgov.auth.service.AuthService; import com.smartgov.common.Result; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Map; RestController RequestMapping(/api/auth) public class AuthController { Autowired private AuthService authService; PostMapping(/login) public ResultMapString, Object login(RequestBody LoginDTO loginDTO) { return Result.ok(authService.login(loginDTO.getUsername(), loginDTO.getPassword())); } PostMapping(/logout) public ResultVoid logout(RequestHeader(Authorization) String token) { authService.logout(token); return Result.ok(); } }登录成功后前端会拿到 token然后后续所有请求都在请求头里带上Authorization: Bearer xxxxx。这也是网关层做统一鉴权的依据。5.2 gateway-service路由转发与 Token 校验网关承担两个任务路由转发以及统一校验请求头里的 Token。路由配置如下# 文件路径gateway-service/src/main/resources/application.yml server: port: 8080 spring: application: name: gateway-service cloud: nacos: discovery: server-addr: localhost:8848 gateway: routes: - id: auth-service uri: lb://auth-service predicates: - Path/api/auth/** - id: approval-service uri: lb://approval-service predicates: - Path/api/approval/** - id: ai-service uri: lb://ai-service predicates: - Path/api/ai/** jwt: secret: smart-gov-approval-jwt-secret-key-please-changeToken 校验过滤器这里不展开全部代码核心逻辑是放行登录接口其余接口必须携带 Token解析失败就返回 401。实现方式可以是用GlobalFilter也可以直接用 Spring Cloud Gateway 自带的TokenRelay配合认证服务器。对毕设而言写一个自定义 GlobalFilter 更能展示对代码的控制力。5.3 approval-service审批状态机设计审批服务是整个项目最核心的业务服务。提交申请时状态从 DRAFT 变为 PENDING审批员点击“通过”后根据审批层级决定是直接变成 APPROVED还是进入下一级审批。一个非常实用的设计是把审批动作封装成枚举// 文件路径approval-service/src/main/java/com/smartgov/approval/model/ActionType.java package com.smartgov.approval.model; public enum ActionType { SUBMIT(提交), APPROVE(通过), REJECT(驳回), RETURN(退回), CANCEL(撤销); private final String desc; ActionType(String desc) { this.desc desc; } public String getDesc() { return desc; } }审批状态流转的核心方法// 文件路径approval-service/src/main/java/com/smartgov/approval/service/ApprovalService.java package com.smartgov.approval.service; import com.smartgov.approval.entity.Application; import com.smartgov.approval.model.ActionType; import com.smartgov.approval.model.ApplicationStatus; import com.smartgov.approval.repository.ApplicationRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; Service public class ApprovalService { Autowired private ApplicationRepository applicationRepository; Transactional(rollbackFor Exception.class) public Long submit(Application application) { application.setStatus(ApplicationStatus.PENDING); applicationRepository.insert(application); return application.getId(); } Transactional(rollbackFor Exception.class) public void handleAction(Long applicationId, ActionType action, String opinion, Long operatorId) { Application application applicationRepository.selectById(applicationId); if (application null) { throw new RuntimeException(审批单不存在); } switch (action) { case APPROVE: application.setStatus(ApplicationStatus.APPROVED); break; case REJECT: application.setStatus(ApplicationStatus.REJECTED); break; case RETURN: application.setStatus(ApplicationStatus.RETURNED); break; default: throw new RuntimeException(不支持的操作); } application.setOpinion(opinion); application.setOperatorId(operatorId); applicationRepository.updateById(application); } }注意两点。第一这里用了Transactional因为审批操作经常伴随状态更新、日志记录、通知发送必须保证同事务。第二switch里直接改状态在两级审批场景下不够用更通用的做法是引入一个“当前审批节点”字段每次 APPROVE 时判断是否需要进入下一节点。这个细节可以在论文的“业务流程设计”一节展开也能在答辩时讲清楚。6. Layui 前端实现Layui 最大的优势是开箱即用。引入layui.js和layui.css之后不需要 Node.js 环境不需要打包直接打开 HTML 页面就能开发。6.1 后台框架与菜单建议直接用 Layui 官方管理系统布局左侧菜单顶部标签页右侧内容区。菜单配置通常放在数据库表里后端返回给前端动态渲染。这种动态菜单设计在答辩时很加分因为说明你考虑了不同角色的菜单权限。6.2 审批列表页核心代码审批列表页是系统里最典型的页面。用 Layui 的table组件通过 Ajax 从后端分页拉数据!-- 文件路径approval-web/src/main/resources/static/pages/approvalList.html -- !DOCTYPE html html langzh-CN head meta charsetUTF-8 title审批列表/title link relstylesheet href/layui/css/layui.css /head body div classlayui-card div classlayui-card-header审批列表/div div classlayui-card-body div classlayui-form stylemargin-bottom:10px; div classlayui-inline input typetext idkeyword placeholder申请编号/申请人 classlayui-input stylewidth:200px; /div button classlayui-btn idsearchBtn搜索/button /div table idapprovalTable lay-filterapprovalTable/table /div /div script src/layui/layui.js/script script typetext/html idoperationTpl a classlayui-btn layui-btn-xs lay-eventdetail查看/a a classlayui-btn layui-btn-xs layui-btn-normal lay-eventhandle审批/a /script script layui.use([table, layer, jquery], function () { var table layui.table; var layer layui.layer; var $ layui.$; function renderTable(keyword) { table.render({ elem: #approvalTable, url: /api/approval/page, method: get, where: { keyword: keyword || }, page: true, cols: [[ { field: applicationNo, title: 申请编号, width: 160 }, { field: applicantName, title: 申请人, width: 120 }, { field: businessType, title: 事项类型, width: 120 }, { field: status, title: 审批状态, width: 100 }, { field: createTime, title: 申请时间, width: 180 }, { title: 操作, toolbar: #operationTpl, width: 160 } ]] }); } renderTable(); $(#searchBtn).on(click, function () { var keyword $(#keyword).val(); table.reload(approvalTable, { where: { keyword: keyword }, page: { curr: 1 } }); }); table.on(tool(approvalTable), function (obj) { var data obj.data; if (obj.event detail) { layer.msg(查看详情申请编号 data.applicationNo); } else if (obj.event handle) { layer.msg(执行审批操作); } }); }); /script /body /html这段代码直接使用后端返回的PageResult结构。Layui table 默认要求返回格式为{code: 0, msg: , count: 100, data: []}所以你的后端统一返回结构必须能兼容这个格式否则表格不会渲染。这是前后端对接时最常见的坑之一。6.3 Layui 常见使用坑网上经常有人提问“Layui 表格滚动条出现后表头不对齐”“表格重新加载后搜索条件失效”。这些问题大多集中在两个原因一是table.render()在容器隐藏或被动态加载时执行导致宽度计算错误二是表格重载时没有把新的查询条件传进去。前者可以通过在容器显式渲染后调用table.resize()解决后者则需要像示例代码里那样用table.reload并带上where参数。7. AI 辅助审批实践AI 在这套系统里的定位是“辅助”不是“自动决策”。原因很简单审批业务需要责任到人AI 只能生成草稿和摘要最终审批意见必须由审批员确认后提交。这个边界在设计上非常清晰也符合安全要求。7.1 AI 服务的三个功能结合审批场景AI 服务可以承担三类工作智能材料摘要把长文本申请材料压缩成要点帮助审批员快速理解审批意见草稿根据申请材料和已有规则生成意见草稿审批员可修改风险点提示识别材料中明显缺失或不一致的信息提醒审批员重点审核。这三个功能都做成“一键调用”响应结果只作为输入辅助不自动写入审批结论。7.2 调用大模型 APIai-service 不直接依赖大模型 SDK而是通过 HTTP 调用大模型 API。现在主流大模型 API 基本兼容 OpenAI 的消息格式所以对接成本很低。核心代码// 文件路径ai-service/src/main/java/com/smartgov/ai/service/AiReviewService.java package com.smartgov.ai.service; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.List; import java.util.Map; Service public class AiReviewService { Value(${ai.api.url:}) private String apiUrl; Value(${ai.api.key:}) private String apiKey; private final RestTemplate restTemplate new RestTemplate(); private final ObjectMapper objectMapper new ObjectMapper(); public String generateReviewDraft(String materialText) throws Exception { String prompt 你是一名政务审批工作人员。请根据以下申请材料生成一段审批意见草稿。 要求1. 用两句话概括申请核心内容 2. 列出材料中可能不完整或需要核实的信息 3. 给出建议结论同意、退回补正或驳回。 请用结构化文字输出。\n\n申请材料\n materialText; MapString, Object body new HashMap(); body.put(model, your-model-name); body.put(messages, List.of( Map.of(role, user, content, prompt) )); body.put(temperature, 0.3); HttpHeaders headers new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setBearerAuth(apiKey); HttpEntityMapString, Object request new HttpEntity(body, headers); ResponseEntityString response restTemplate.exchange( apiUrl, HttpMethod.POST, request, String.class); JsonNode root objectMapper.readTree(response.getBody()); return root.path(choices).path(0).path(message).path(content).asText(); } }这段代码有四个重要设计用Map构建请求体避免字符串拼接造成的 JSON 转义问题temperature设置为 0.3让输出更保守、更稳定apiUrl和apiKey从配置文件读取用Value注入不写死在代码里把大模型返回内容提取为纯文本再交给上层接口包装。7.3 超时与降级调用外部 API 最怕的是网络慢或者对方服务不可用。如果 AI 服务直接同步等待 30 秒审批员点击“生成意见”后界面一直转圈体验会非常差。推荐的折中做法是前端先调用 AI 生成接口后端限制超时时间比如 10 秒如果超时或接口异常捕获后返回友好的提示“AI 服务暂时不可用请手动填写意见”。这样 AI 只是辅助不会阻塞审批主流程。这段逻辑不复杂但在答辩时是很好的亮点“我考虑到了外部依赖的不可靠性并做了降级处理。”这一句话能体现出你对生产环境问题的理解。8. 系统运行验证与常见问题排查8.1 启动顺序正确的启动顺序很重要。如果 Nacos 没起服务注册一定会报错。推荐顺序是# 1. 启动 MySQL确认本机 3306 端口可访问 mysql -uroot -p # 2. 启动 Redis redis-server --daemonize yes # 3. 启动 Nacos单机模式 cd nacos/bin ./startup.sh -m standalone # 4. 启动各微服务网关最后启动 mvn spring-boot:run -pl gateway-service如果是在 IDEA 里可以按顺序启动 auth-service、approval-service、ai-service最后启动 gateway-service。启动完成后打开 Nacos 控制台默认地址http://localhost:8848/nacos在“服务列表”里应该能看到所有服务都已经注册。8.2 验证接口是否正常用浏览器或命令行工具测试一个最核心的接口curl -X POST http://localhost:8080/api/auth/login \ -H Content-Type: application/json \ -d {\username\:\admin\,\password\:\123456\}预期返回 JSON里面包含token字段。拿到 token 后再调用审批列表接口curl -X GET http://localhost:8080/api/approval/page \ -H Authorization: Bearer 你的token如果返回code: 0且包含data数组说明网关路由、JWT 鉴权、服务发现、数据库查询整条链路已经通了。8.3 常见问题排查表格问题现象可能原因排查方式解决方案微服务启动报连接 Nacos 失败Nacos 未启动或端口不对检查 Nacos 进程和 8848 端口先启动 Nacos确认启动日志无异常服务能启动但无法通过网关访问网关路由配置有误查看网关启动日志确认路由是否生效检查 application.yml 中 Path 是否与服务端 RequestMapping 匹配Layui 表格不渲染数据后端返回格式不符合 table 组件要求浏览器 F12 查看 Ajax 返回调整统一返回结构兼容{code,msg,count,data}格式AI 接口超时外部 API 响应过慢或网络不通查看 ai-service 日志和超时配置设置合理超时时间增加降级兜底依赖版本冲突Spring Boot 与 Spring Cloud Alibaba 版本不匹配运行mvn dependency:tree查看冲突按官方版本矩阵统一版本这里需要特别说明的是版本问题排在所有问题排查的最前面。很多同学把项目从网上 clone 下来一启动就报NoSuchMethodError或者一大堆ClassNotFoundException大概率是 Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者版本没有对应上。检查方式很简单找到官方版本矩阵逐一对齐而不是随便升级某个依赖。9. 从毕业设计到生产级项目的工程建议如果这个项目只停留在“能跑、能演示、能答辩”的水平那还不够。以下几个建议能帮你拉开与普通毕设的差距也更接近真实项目的工程要求。9.1 配置分离所有资源的地址、密钥、开关都应该放到配置中心而不是写死在 application.yml 里。Nacos 配置中心的好处是可以动态刷新不用重启服务。演示时你可以现场修改一个配置项让运行中的服务立即生效这个操作往往是最直观的加分点。9.2 审批操作必须幂等审批场景里“提交”和“审批”操作最怕重复请求。用户连续点两次按钮可能导致同一审批单被提交两次。后端的解决方案是在数据库层对审批单号加唯一约束或者在处理前先检查当前状态是否允许目标操作。这个细节虽然小但能说明你考虑过并发问题。9.3 日志链路追踪微服务下排查问题最难的是“一个请求经过三个服务出错了到底看哪个日志”。如果时间允许可以在网关生成一个traceId通过请求头传递下去每个服务在打印日志时带上这个 ID。这样一次请求的所有日志就能串起来。即使这篇毕设不引入 SkyWalking 这类重工具手动实现一个简单 traceId 过滤器也完全够用。9.4 安全与权限最小化政务系统涉及公民信息对安全要求很高。演示环境可以用简单密码但建议在论文里明确说明生产环境的安全策略数据库账号最小权限、密钥加密存储、接口访问白名单、操作日志留痕、数据脱敏展示。这块内容不用全实现写进论文并能在答辩中说明思路已经能体现工程素养。9.5 答辩加分的学习路线如果你想继续把系统做得更深推荐按这个顺序扩展用 Flowable 或 Activiti 替换自研状态机覆盖会签、或签、多级审批等复杂场景引入 Seata 处理跨服务分布式事务解决审批单创建和通知发送的一致性问题把 AI 服务改成基于向量库的相似案例检索让“智能辅助”更进一步补充单元测试和接口测试提升代码质量的可信度。这里特别说明一下 Flowable 和 Activiti 的方向。审批平台做深之后流程引擎是绕不开的二者都能运行在 SpringCloud 微服务体系里也是互联网上大量实战项目的选择。但如果毕设时间有限自研状态机已经把核心思路讲清楚了先不必强行引入。写在最后回到最开始的问题一套审批管理系统怎么才能让人觉得“不简单”答案不在于堆了多少个框架而在于你是否想清楚了服务边界是否把每个技术都放对了位置。SpringCloud 解决的是服务治理和通信Layui 解决的是后台交互效率AI 解决的是审批人员的重复劳动。三个技术各司其职加起来就是一个逻辑自洽、可解释、可演示、可扩展的毕设项目。下一步建议非常明确先把父工程和 Nacos 搭起来把网关和认证链路跑通再逐步添加审批业务和 AI 模块。按这个顺序推进即使中间遇到问题你也能准确判断出问题出在基础设施层、业务层还是外部服务层而不是对着几百行报错日志毫无头绪。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻