news 2026/10/11 9:11:41

基于Spring Boot的电子企业智能生产信息系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Spring Boot的电子企业智能生产信息系统

“毕业设计”这四个字,对很多做系统开发的同学来说,既是证明自己的机会,也是通往崩溃的入口。今天想聊的这个项目,标题很直白——基于Spring Boot的电子企业智能生产信息系统。如果你正在做类似方向,或者只是对“生产制造类管理系统”感兴趣的玩家,这篇内容应该能帮你少踩不少坑。

先从大方向上拆解一下。这类系统本质上解决的,就是把电子制造企业的生产现场从“纸笔对账、邮件传递、Excel统计”拽到“一个网页搞定排产、派工、物料、质检、追溯”的数字化管控。Spring Boot作为后端框架,Vue作为前端,MySQL存数据,再加一个轻量级权限控制,这套组合是当前毕业设计和中小型企业项目里最主流、也最容易被验证的方案。它不炫技,但足够完整,踩坑概率低,答辩时又能讲出“架构思维”。

这篇文章我会按自己的实际开发顺序来讲,不搞教科书式的叙述,直接告诉你每一步是怎么想的、为什么这么做、哪里容易翻车。

1. 项目概述与需求拆解

1.1 电子企业生产信息系统的核心痛点

电子制造业和其他离散制造业最大的区别,在于三点:元器件种类极多、批次切换频繁、质量追溯要求高。比如一块PCBA主板上可能有几百颗物料,一颗电阻用错了料号,整批产品都可能报废。传统的手工记录根本扛不住这种复杂度。

我当时的调研阶段去看了几条真实产线的作业方式,印象最深的是:工人在工位上领料,靠纸质工单加上班长口头传达;产线做完一批货,填一张手写报表;质检发现异常,在微信群喊人,但问题批次追溯到哪个环节,可能要翻半天纸质记录。这套模式不是不能运转,但碰到“客户要追溯某个批次用了哪家供应商的料”这种合理需求,基本就是灾难。

所以这个项目的核心需求拆出来其实很清晰:第一,把生产工单变成电子化数据流;第二,让物料从入库到上线的每一步都可追踪;第三,把质检数据和产线实时状态汇总到一个看板上;第四,给管理层一个能下钻的报表入口。这四个点就足够撑起整个系统的骨架了。

1.2 毕业设计最容易踩的坑:需求边界

很多同学拿到这个题目之后,第一反应是“我要做的东西好多,ERP该有的功能全塞进去”。这恰恰是最危险的想法。ERP是面向供应链、财务、人力的大企业系统,一个毕业设计如果模仿它的完整规模,基本上三个月都做不完页面。

我给当时的自己划定的边界是这样的:不碰财务,不碰薪资,不碰复杂的MRP运算,聚焦“产线作业”这一条主线。具体功能围绕生产工单、物料跟踪、质检记录、设备状态、统计报表五个闭环来做。采购、仓储、销售这些模块如果说和主链路强相关,就以“简化版”的形式存在,比如采购只做到生成采购单和到货登记,不涉及应付账款。

这个边界划定非常重要,因为答辩时老师最常问的问题就是“你的系统解决了什么实际问题”。你能清晰说出“我只负责从工单下发到产品入库这一段的数据闭环”,比含糊其辞地讲“我实现了完整的企业信息化”要可信得多。

1.3 角色划分与权限设计思路

生产信息系统的小型化不代表可以没有角色概念。我在设计时定了四种角色:管理员、计划员、产线操作工、质检员。每种角色看到的菜单和可操作的按钮完全不一样。

管理员管系统配置和用户管理,计划员负责工单创建和排产,操作工只执行自己的任务、上报完工数量,质检员录质检结果、发起不合格处理。这个设计不仅仅是为了安全,更重要的是让数据所有权清晰——谁创建、谁修改、谁审核都被记录在操作日志里。

权限这块我选择了Spring Security配合JWT做无状态认证,再加上一个简单的菜单表关联角色表来动态生成路由。Electron企业规模不大,不需要引入复杂的RBAC框架,但表和代码上保留扩展的空间。后面想接一个第三方系统或增加角色,基本就是加数据的事。

2. 技术选型与架构设计

2.1 为什么选Spring Boot而不是SSH/SSM

这个话题在社区已经讨论烂了,但对毕业设计而言,Spring Boot的优势是决定性的。不用再为XML配置文件浪费一页纸,Maven直接拉依赖,内嵌Tomcat一键启动,这些特性让你能把精力集中到业务逻辑上。

另外一点容易被忽视的是生态。Spring Boot的文档、视频、脚手架、demo案例是全网最密集的,这意味着你遇到一个报错,要么在Stack Overflow能找到场景几乎一致的解决方案,要么能在中文社区搜到现成的排查思路。对于以“完成项目”为目标的人来说,可检索性就是工程效率。

Spring MVC、MyBatis-Plus这种老搭档在工业界有大量生产环境验证,稳定性极好。我用的是Spring Boot 2.7.x,不要上3.x,原因很简单:3.x要求JDK 17起步,而且部分老版本依赖的兼容性会让你白花很多时间。毕业设计求稳,不求新。

2.2 前后端分离与单体部署的取舍

这个项目我选择了Vue 3 + Element Plus做前端,后端仅提供RESTful接口,整体采用前后端分离架构。但部署时并不搞微服务,也不引入Nginx负载均衡,而是把前端打包成dist文件夹,由Spring Boot的静态资源映射直接托管。

很多人会觉得“前后端分离就必须前端单独部署”,实际操作里我见过大量企业项目为了图省事,也都是把前端构建产物塞进后端项目的。这样做的好处是:交付一个Jar包就等于交付了完整系统,远程调试时只要看一个进程,不需要处理跨域问题。

开发阶段当然要让前后端独立运行,Vue项目用默认的Vite代理转发/api到localhost:8080,这样热更新舒服,联调也方便。等到生产环境部署再合并,是一个性价比很高的方案。

2.3 数据库设计:一张BOM表撑起主线

数据库是整个系统的地基。电子企业的数据链路很依赖BOM(物料清单),BOM拆错了,后面所有环节的数据都会错。所以我设计了一张非常关键的表叫product_bom,记录一个成品由哪些物料组成、每个物料的用量和替代料关系。

表结构大概是:bom_id、product_id、material_code、quantity、unit、is_key_material、substitute_code这些字段。关键物料用is_key_material标记出来,因为在质量追溯和统计时会专门对它做维度分析。

此外,工单表、工序表、物料库存表、质检记录表、报工记录表、设备状态表这些基本都是围绕“工单-物料-质量”这条主线来建。外键关系上我没有强依赖数据库物理外键,而是在代码层维护逻辑关系。这样做的好处是后续拆表、分库、并行查询压力更小;坏处是你必须在Service层把关联字段校验做扎实,防止产生孤儿数据。

2.4 ORM选型和编码规范

持久层用了MyBatis-Plus,原因就是它提供了BaseMapper和通用Service,单表CRUD基本不用手写SQL,节省的时间非常可观。多表关联查询和复杂统计,我依然手写XML里的SQL,保证性能和可读性。

编码规范上,我的经验是:实体类字段全部使用驼峰命名,数据库字段使用下划线,开启MyBatis-Plus的下划线自动映射。创建时间、更新时间这种字段用MetaObjectHandler统一自动填充,不用在每个Service里手动赋值。这些看起来像小细节,但能让代码量少掉三分之一。

3. 系统核心模块与实现逻辑

3.1 工单管理与生产排产

工单是整个系统的起点。计划员在生产工单页面创建工单,选择产品,系统自动拉取该产品对应的BOM,生成一份包含产品编码、批号、计划数量、计划完成时间的任务单。

排产这块我考虑到毕业设计的展示效果,没有上APS(高级排产系统)那种复杂度,而是做了“基于优先级和交期”的简化逻辑。每张工单有一个紧急等级字段,综合交期紧迫度和设备负荷,生成一个可编辑的排序结果。计划员可以手动调整顺序。这个策略的好处是逻辑不复杂、可解释性强,答辩时能讲清楚,而且演示效果非常直观——你可以把一条产线的计划安排实时调整为“先做这批紧急订单”。

工单状态机需要特别设计:草稿、待排产、已下发、生产中、已完工、已取消。每个状态迁移都必须在工单操作日志表中写一条记录,谁在什么时间把工单从待排产改成了已下发,全部留痕。这个是生产场景的硬性要求,也是老师在答辩时容易追问的点。

3.2 物料管理与追溯

物料这块重点不在简单库存流水,而是“批次追溯”。电子元件的来料批次和自制半成品批次都需要唯一编码规则,比如ML20240517-001这类格式:物料编码+日期+流水号。收料时录入供应商批次号、生产日期、保质期信息,系统内部再生成一个内部批次号。后续的领料、退料、工序流转全部绑定内部批次号。

领料登记时,操作工扫描工单号和物料条码,后端去校验该物料是否符合当前工单BOM的需求,数量是否充足。校验通过就扣减库存,生成一条领料记录。如果一次性发整批物料,可以用批量操作工具一次传递多行数据,后端循环校验,返回不通过的明细。

追溯场景就很好实现了:输入一个成品序列号,反查出它经过的每一道工序的加工设备、操作工、用料批次、质检结果。反过来,输入一个物料批次号,也能正查出它被哪些工单使用过。这就是电子制造业最看重的双向追溯能力,也是这个系统比普通库存管理系统值钱的地方。

3.3 质量检验与异常闭环

质检模块我拆成两部分:来料检和生产过程检。来料检是物料到货后检验员录入结果,分合格、不合格、让步接收三种状态;过程检则是每个工单完成一定数量后进行的抽检。

质检记录表的核心字段是检验单号、工单号/物料批次号、检验项、抽样数、不良数、缺陷代码和处理意见。这里我特意做了一个“缺陷代码维护”功能,因为实际产线上会用一套固定的缺陷分类,比如焊锡不良、元件偏移、外观划伤,代码化之后统计会非常顺。

不合格品处理我设计了三种动作:返工、报废、让步接收。选择返工,系统自动生成一张返工工单;选择报废,系统扣除对应数量并触发物料补充指令;让步接收需要输入审批人,并且这张检验单会被标记为“例外放行”,之后的数据分析里会单独追踪这类批次的表现。这个闭环逻辑很常见,但很多毕业设计只做到记录不合格,没有触发后续动作,区别就在这里。

3.4 产线实时看板与统计报表

实时看板是演示时的亮点模块。我用WebSocket推送工位状态数据,前端用大屏组件展示产线当前的在制品数量、设备运行状态、当日产量、不良率等指标。这部分技术上不复杂,关键是数据更新的时效和页面视觉效果。

统计报表部分,前端用了ECharts,后端提供几种固定维度的统计接口:按日期汇总产量、按产品统计合格率、按缺陷类型分析柏拉图、按工序统计设备利用率。这类SQL涉及GROUP BY和聚合函数,我全部写在XML里,并用索引优化过。比如工单表经常按创建时间和状态查询,就建了联合索引(create_time, status),效果立竿见影。

4. 关键功能实现与代码拆解

4.1 基于WebSocket的生产状态订阅

实时看板如果靠前端轮询每隔几秒请求一次接口,也能实现功能,但体验不够“智能”。我选用Spring Boot的WebSocket做推送,凡是产线状态变化,后端主动通知所有订阅页面。

后端关键代码结构大致是:配置一个WebSocketConfigurer注册HandshakeInterceptor,处理HTTP握手阶段的参数校验;定义TextWebSocketHandler处理连接建立、消息收发、连接关闭三个核心方法;前端用一个WebSocketClient连接并监听message事件,数据进来直接更新图表组件。

这里有个容易踩的坑:WebSocket连接在Nginx代理的情况下需要配置Upgrade请求头,如果你在开发环境一切正常、部署后却频繁断开,多半是代理配置少了这段。不过我们这个项目把前端合并进后端,通常不会碰到这类问题,但知道原因,能帮你省很多排查时间。

我看过一些版本的管理系统用的是SSE(Server-Sent Events)而不是WebSocket,其实对单纯的服务端推送来说SSE更省资源,语义也更简单。但WebSocket最大的好处是支持双向通信,未来如果要让前端主动触发某些命令比如“暂停某个工位”,WebSocket可以直接搞定,SSE还得另外走HTTP接口。我选择WebSocket是考虑到这个点。

4.2 简化排产算法的实现思路

排产算法我基于一个非常实用的调度规则:最短加工时间优先+交期紧迫度修正。给每个待排工单计算一个优先级得分,得分=交期剩余天数倒数×紧急系数+单位加工工时倒数×权重。得分越高,排产越靠前。

具体实现里,我用一个PriorityQueue作为调度队列,每次取最高优先级的工单分派到当前空闲的设备组。设备组我定义了设备类型模板,比如贴片机、回流焊、AOI检测,工单里指定了必需的设备类型,调度时就约束了选择范围,不会出现“AOI设备去干贴片的活”这种荒唐结果。

答辩的时候这套逻辑能讲的东西非常多:为什么用优先级队列,为什么权重参数要可配置,为什么不直接做成实时重排而是每天滚动排产一次。你越讲得清楚,老师越觉得你真的在做工程,而不是抄了一个管理系统的后端。

4.3 安全与操作日志的实现

生产系统的数据可信度全在操作日志上。我实现了一个自定义注解@OpLog,标记在需要记录的方法上,通过AOP切面统一记录操作人、操作类型、操作内容、IP、消耗时长。这样就不用每个Service方法里手动去写一行日志代码,维护成本大幅度降低。

具体配置上,切面拦截Controller层带@OpLog注解的方法,通过异步线程池写入日志表,避免同步写日志拖慢业务接口。异步务必用独立的Executor,不要直接用@Async默认的SimpleAsyncTaskExecutor,那个会频繁创建线程,生产环境容易搞出性能问题。

权限这块用Spring Security的注解@PreAuthorize控制接口的访问角色,前端用自定义指令v-permission控制按钮显隐。这里有一个经验:前端的隐藏不等于安全,接口层的鉴权才是真正的安全。很多毕业设计只做了前端菜单的显示控制,后台接口直接裸奔,这是答辩时的大坑。

4.4 报表查询的SQL优化细节

统计口径不一样,SQL写法差别巨大。比如“今日产量”可以直接SUM(completion_count) GROUP BY product;但“不良率趋势”要按天先把良品数、不良数聚合到一个子查询,再计算比例。子查询的关联键要确保有索引,不然数据量一大,页面请求直接超时。

我这里贴一个比较典型的不良率统计SQL的写法思路:先按日期、产品、工位分组统计合格数和不良数,外层再算比例,最后按日期排序。如果直接在原始流水表上做条件聚合,MySQL虽然也能跑,但几万条数据之后性能就开始难看,所以建了一张日汇总表,夜间定时任务去刷新,报表接口只查汇总表。这种以空间换时间的思路在制造业数据场景非常常用。

5. 部署、远程调试与常见问题

5.1 项目打包与生产部署

后端打包我用的Maven的package命令,生成可执行Jar包后直接扔到服务器上,用java -jar app.jar启动。前端构建完毕的dist目录复制到后端项目的static目录下,重新打包一次即可。

服务器我选了最普通的Linux云主机,没有任何中间件依赖,Jar包启动日志输出到文件,配合systemd做服务守护。systemd配置里务必设置Restart=always,这样进程挂掉后能自动拉起,避免半夜产线看板断掉没人知道。JVM参数里根据机器内存配上-Xms和-Xmx,别抱着默认值跑,否则大并发场景下GC会让接口卡顿。

很多人喜欢在服务器上装宝塔面板来部署,我也这么干过,但注意一点:宝塔自带的环境版本可能和你的项目不匹配,比如自带的Java版本不是17,就会启动报错。最好在服务器上手动安装指定版本JDK,并设置好JAVA_HOME环境变量,再通过脚本来启动。

5.2 远程调试的几种可行方式

“远程调试”这四个字对不同的人含义不同。我这里按实际场景拆开说。

第一种是远程连接服务器终端,看日志排错。这是我日常最常用的方式,生产日志里加了traceId,可以直接用grep过滤一个请求的完整链路日志。第二种是真正的“远程调试”:在服务器上以debug模式启动Jar包,开放一个调试端口,本地IDEA配置一个Remote JVM连接,就能像本地调试一样打断点、看变量。这种方式在复现一个只在服务器上触发的问题时极其好用。

远程Debug配置的注意点很关键:JVM启动参数要加-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,然后本地IDEA在Run Configurations里新增一个Remote类型,Host填服务器IP,Port填5005。如果服务器有防火墙,一定要放行5005端口。生产环境调试完必须马上关掉这个端口,否则等于给别人留了一个连接你进程的后门。

对于“远程调试”这个需求,有些同学的场景其实是希望老师或队友能看到自己的系统运行效果,那可以直接用内网穿透工具把本地端口映射到公网,再把链接发给对方。这里提示一下,公网暴露开发机有一定风险,演示完毕记得把隧道关掉。

5.3 常见问题速查表

我把自己开发和调试过程中实际踩过的坑整理成了一张速查表,这个表值得你存下来:

问题现象可能原因解决方案
前端访问后端接口跨域报错前后端分离模式下没做代理或CORS配置开发环境用Vite proxy,生产环境合并部署或配CORS
上传的文件无法显示,404静态资源路径映射没配好配置ResourceHandler把本地磁盘目录映射到URL路径
MyBatis-Plus分页查询无效缺少分页插件配置PaginationInnerInterceptor,注意数据库方言选择
JWT登录后刷新页面报401Token没有存到localStorage或者拦截器配置有误检查前端请求拦截器是否统一携带Authorization头
WebSocket连接频繁断开代理服务器未配置Upgrade头或心跳检测缺失增加全局心跳,前后端约定N秒发送一次Ping消息
linux下中文乱码服务器字符集问题启动Jar时加-Dfile.encoding=UTF-8参数
定时任务不执行缺少@EnableScheduling注解启动类加注解,检查Cron表达式是否符合预期
数据库连接池连接耗尽每个请求都新建连接或连接不释放检查DataSource配置,确保事务正确边界,连接池设置合理初始大小

这张表我按照排查频率排序,最上面的几个问题在开发阶段几乎所有人都会遇到。特别是跨域和静态资源这两块,占了调试时间的很大比重,提前搞清楚能帮你省出大量精力去打磨业务功能。

5.4 关于源码和文档的交付经验

很多购买或者下载这类项目源码的读者,拿到手的第一件事是急着启动,但我建议先花一个小时浏览目录结构和设计文档。好的毕业设计源码,文档质量比代码本身更能体现你的工程素养。

我当时配套的文档包含了需求分析、用例图、ER图、接口说明、部署手册和答辩PPT提纲这几部分。ER图我强烈建议用可视化工具画清楚,包括每个表的字段、类型、主外键关系。这不仅是为了交付给老师看,更重要的是你自己对着ER图检查一遍,能发现很多设计阶段遗漏的字段。

接口说明文档用Swagger注解自动生成,再导出成Markdown或者HTML,这样接口有任何变动,文档都能同步更新,不用手动维护。这是很多项目交付时最容易烂尾的部分。

在部署文档中,我把环境要求列得非常明确:JDK版本、Maven版本、MySQL版本、Node版本。因为这些版本不一致很容易导致别人拿到源码却跑不起来。有条件的还可以写一个一键启动脚本,脚本自动检查环境变量,缺失时给足提示,这个细节在很多职业开发者的评价体系里很加分。

6. 从毕业设计到可以落地的工程化思路

6.1 数据一致性与事务边界设计

生产系统的数据一致性比普通管理系统要求高得多。你创建一个工单时,不仅要插入工单主表,还要生成BOM快照、初始化物料需求明细、给操作工生成待办任务。任何一个步骤失败,都不能让工单处于半建好的状态。

我用@Transactional管理这类多表操作,默认回滚条件是RuntimeException。这里有个细节容易被忽略:如果某个事务里调用了异步方法,异步线程里的异常不会触发当前事务回滚,所以异步操作一定要单独处理错误,比如记录到一张失败任务表,定期扫描重试。

另一个常见情况是并发报工。操作工点击“完工上报”时,如果两个请求同时到达,可能导致库存扣减和完工数量校验出错。解决方式是给工单状态加上乐观锁版本号,更新时带上where version=xxx,版本不符就更新0条,再提示用户刷新重试。这种做法比锁表要优雅得多,性能也好。

6.2 消息推送和通知模块的价值

生产现场的异常如果不立刻触发通知,系统就只是一个“报表工具”。我在质检异常节点接了一个轻量的消息通知模块,当某工单不良率超过阈值时,自动给相关角色发送站内信提醒,并同步推送一条通知到WebSocket看板。

证书通知的阈值我设为可配置的,质检员可以在参数配置页面里设置“超过5%不良率触发预警”之类的规则。这个功能不仅是演示亮点,也真正覆盖了产线的真实需求——班组长不需要一直盯着看板,异常来临时系统会“喊”他们。

通知消息表设计得非常简单:id、receiver_id、message_type、content、is_read、created_at。前端在用户登录后拉取未读消息数量,点击后标记已读。内容模板用String.format占位符,避免拼接SQL或HTML导致的注入问题。

6.3 从项目本身思考的通用价值

做完这个毕业设计之后,我其实意识到一件事:这类“电子企业智能生产信息系统”虽然挂了一个漂亮的名字,但它的本质是“用数据流把责任链组织起来”。从计划员到操作工,从料库到成品库,每个环节的数据都被系统记住,出了问题可以回溯,这本身就是数字化管理的雏形。

如果你之后想把系统往更深的方向扩展,最值得投入的是机器设备的数据采集,比如通过OPC UA协议把设备的PLC数据读取上来,让报工数量不需要人工输入。再下一个层级是做一个轻量级的数字孪生看板,通过三维可视化把车间的设备布局和运行状态映射到页面上。这两个方向都是目前制造业数字化转型的香饽饽,而这个项目的底层数据模型可以帮助你平滑过渡。

7. 一些实操建议和心得

整个项目从立项到完成,我最想强调的一件事是:不要用“做功能”的心态去做系统,要用“做数据闭环”的心态去做。很多同学做完一个模块,能增删改查就觉得自己做完了,但整个系统串起来跑一遍,发现工单完工了库存没有自动变化,物料领了但没有和工单关联,质检通过了但追溯查不到数据。这种断裂感在答辩演示时会非常明显。

所以我的建议是,在编码之前,先花两天时间把核心主线程捋清楚:创建工单→提交排产→物料领用→工序报工→质量检验→产品入库。每一个步骤,都问自己一个问题:这个动作发生之后,哪些表的数据需要跟着变化。把这张数据流转图画清楚再动手,你会发现代码写起来思路极其顺手,几乎不用返工。

另外,给自己留足测试时间。哪怕是个人项目,也要把核心流程的测试用例先列出来,像“物料不足时领料是否被拦截”、“不合格品处理触发返工后工单是否自动生成”这类逻辑,手写几个测试场景,能解决掉绝大多数隐藏bug。临近交稿还在改大功能是最煎熬的,而把联调和测试前置,会让交付体验完全不一样。

最后,如果你想基于这套代码做二次开发,比如接入真实产线的数据,记得把数据库的表结构和字典表设计得规范一点,尤其是每张业务表都加上创建时间和更新时间。真实环境中,这些时间字段既能做统计分析,也是排查数据异常的线索,价值远比你想象的大。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 9:11:36

如何做到无可挑剔:代码审查与交付验收的质量标准与细节打磨

1. 一个词引发的思考:为什么"impeccable"值得单独拿出来聊第一次看到"impeccable"这个词被单独拎出来当作项目标题,我的反应是愣了一下。这个词在英文里不算生僻,但也不算日常高频——它的意思是"无可挑剔的、完美的…

作者头像 李华
网站建设 2026/10/11 9:09:38

写信息工程毕业论文,AI 到底怎么选?从调制识别实验到答辩 PPT 的一份实战清单 [特殊字符]

如果你是信息工程专业的同学,大概率会遇到一类很典型的毕业设计:做一个“基于深度学习的通信信号自动调制识别系统”。 这类题目横跨通信原理、数字信号处理和深度学习:要生成或读取 RadioML 一类信号数据,理解 I/Q 两路信号、信…

作者头像 李华
网站建设 2026/10/11 9:09:10

Spring Security 7的OAuth2授权码Redis存储方案

写这篇文章的时候,我正好在帮团队把一套基于Spring Boot 3的认证中心从单机内存模式改造成支持多实例部署的分布式架构。折腾了整整一个下午,踩了不少坑,最终敲定了Spring Security 7框架下OAuth2授权码走Redis存储的方案。先简单交代一下背景…

作者头像 李华
网站建设 2026/10/11 9:08:09

REA模型:用资源-事件-参与主体重塑企业业务数据建模

看到“rea”这个标题,我第一反应是把它补全成 REA——Resource-Event-Agent,也就是资源、事件、参与主体。这不是三个单词的简写,而是我做企业信息系统设计和数据建模时绕不开的一套核心方法论。如果你也在和订单表、流水表、明细账表打交道&…

作者头像 李华
网站建设 2026/10/11 9:07:51

langchain agent调用mcp报401?把endpoint改到TaoToken的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/11 9:07:38

Python 安装

Python 安装 1. Linux 系统 1.1 使用系统自带 Python(推荐) 大多数 Linux 发行版预装了 Python 3,只需让 python 命令指向 python3: sudo apt update sudo apt install python-is-python3 -y验证安装: python --v…

作者头像 李华