基于Spring Boot的诊所管理系统:从需求到落地的完整实战
做这个诊所管理系统之前我在好几家小诊所蹲过点也跟几个开诊所的朋友聊过他们的日常。一个很扎心的事实是大多数诊所的数字化还停留在Excel 纸质病历的水平收费靠手工计算药品库存靠月底盘点医生想看个历史病历得翻半天柜子。做这个系统的初衷很简单——用Spring Boot把这堆乱糟糟的事捋顺。Spring Boot基于Java的诊所管理系统说到底就是一套围绕患者就诊全流程的信息化工具覆盖从患者建档、预约挂号、医生接诊、病历书写、处方开立、收费结算到药品库存管理的完整链路。这套系统最适合两类人参考一类是刚入行想找个完整实战项目的Java开发者另一类是真的在运营诊所、想搞一套内部系统但预算有限的小型医疗机构。我会从需求梳理、技术选型、数据库设计、核心模块实现到踩坑排查完整讲清楚这套系统是怎么从零落地到能用的。1. 需求分析与整体设计思路做管理系统最忌讳一上来就建表写代码先把业务捋清楚后面能少走一半弯路。诊所的日常运转和医院不太一样规模小但流程杂设计时必须贴合实际场景。1.1 业务场景建模从患者进门到离开我调研下来一家小型诊所的完整就诊流程大致是这样患者到店 - 前台建档或查询老档案 - 挂号选择科室和医生 - 候诊 - 医生接诊、询问病情、书写病历 - 如需检查开检查单 - 根据病历开处方 - 患者去收费处缴费 - 药房凭处方发药 - 患者离店这套流程听起来简单但每个环节都有细节坑。比如建档这事很多患者是老年人身份证号记不住姓名可能同音不同字这就要考虑模糊查询和身份证校验的容错。再比如挂号诊所不像大医院有严格的号源池医生可能同时负责内科和全科号源规则要灵活。我在设计时把系统拆成了四大模块基础信息管理患者、医生、药品、核心业务流预约、病历、处方、交易结算收费、退费、统计分析经营报表、药品消耗。1.2 技术选型为什么是Spring Boot技术选型上我直接锁定Spring Boot 2.7.x没有犹豫。原因有三第一生态成熟。诊所管理系统虽然规模不大但涉及Web接口、数据库事务、权限控制、文件上传检查报告图片、定时任务药品效期提醒Spring Boot全家桶几乎都能找到对应的starter开发效率非常高。第二招人容易。现在Java后端的招聘市场上Spring Boot基本是标配技能后续系统要找人维护或二次开发人才储备足够。第三部署方便。一个内嵌Tomcat的Jar包扔到服务器上java -jar一把梭对小诊所的IT能力来说是最友好的方案。持久层我用的是MyBatis-Plus数据库是MySQL 8.0权限认证用了Spring Security加JWT。前端没有单独搞前后端分离的复杂架构直接用了Thymeleaf模板引擎加AdminLTE这套经典组合。为什么这么选因为这套系统要部署在诊所的普通电脑上可能就一台Windows机器前后端分离会引入Node.js构建、跨域配置、独立部署等一系列额外复杂度对小团队不友好。单体加模板引擎所有页面和接口在同一个应用里打包运维只需要会复制粘贴Jar包就够了。提示如果诊所后续业务量增长到日门诊量超过500人次再考虑把前端拆出去用Vue或React重构也不迟。初期阶段单体架构的简单可靠远比架构的先进性重要。2. 数据库设计核心表结构与模块边界数据库设计是整个系统最见功力的部分。我做了很多版设计最后定下来23张核心表这里挑几张最关键的表讲讲设计思路和取舍。2.1 患者表与医生表基础数据的细节设计患者表我命名为patient核心字段包括id、patient_name、gender、phone、id_card、birthday、address、allergy_history、create_time。这里有两个设计细节值得说身份证号id_card我设置了唯一索引但同时允许为NULL。为什么因为很多老患者建档时没带身份证只能登记手机号。如果唯一约束太死板这些没身份证的就建不了档。但一旦同一个身份证号重复建档系统必须拦截避免历史病历分散到多个档案下面。这是一个典型的业务现实驱动约束设计的案例。医生表doctor除了doctor_name、gender、phone之外还加了department_id关联科室表以及title职称、schedule_type排班类型。schedule_type这个字段我一开始没想清楚后来发现医生排班需求差异巨大有的医生固定周一到周五全天坐诊有的医生只出上午半天有的医生隔天轮换。用一张排班规则表显然太僵硬我最终采用规则模板 例外调整的方式既保证了常规排班的自动生成又能处理临时停诊、代班这类特殊情况。注意患者档案中一定要保留一个备注字段老诊所经常有患者是熟人介绍来的需要记录王阿姨介绍、缠过玛卡这类个性化信息。这些信息在系统里不能用正式字段来约束自由文本反而最实用。2.2 预约、病历与处方表流程链路的骨架预约表appointment是挂号环节的核心。我设计的字段包括appointment_no预约号、patient_id、doctor_id、appointment_date、time_slot时间段、status状态、source来源线上预约/现场挂号、create_time。status字段是一个状态机我用的是0-待就诊、1-已就诊、2-已过号、3-已取消这四个状态。这个状态机贯穿整个就诊流程所有业务操作都必须依赖它做校验。比如退费时如果处方已经发药了就绝不允许直接退挂号费又比如补打处方时必须确认这条预约状态是已就诊否则说明处方还没开出来属于非法操作。病历表medical_record的核心字段是record_no、patient_id、appointment_id、doctor_id、chief_complaint主诉、present_illness现病史、past_history既往史、diagnosis诊断、advice医嘱、create_time。诊断结果我单独用了diagnosis表来存因为一个患者这次就诊可能同时有多个诊断比如上呼吸道感染 过敏性鼻炎如果病历表里只存一个字符串后续做疾病统计分析时根本没法聚合。处方表prescription和prescription_item是一对多的关系。父表存处方编号、处方类型西药/中成药/草药、开单医生、患者、总金额、状态子表存具体的药品名称、规格、数量、单价、用法用量。处方的状态流转也单独梳理过0-待收费、1-已收费待发药、2-已发药、3-已退费。这套状态和预约状态互相配合保证了财务和药房信息的一致。2.3 药品与库存表效期和批号的特殊处理药品表drug包含drug_code、drug_name、specification规格、unit单位、manufacturer生产厂家、purchase_price进价、sale_price售价、prescription_type处方类型、stock_quantity当前库存、alert_quantity库存预警阈值。药品库存我一开始想偷懒只在drug表里放一个stock_quantity字段每次发药就递减。但药房实际的进药模式是分批次的——同一款药品可能进了三个批次生产日期不同、效期不同发药时要先进先出否则容易造成近效期药品积压。后来我加了drug_batch表按批次记录库存发药时按效期从早到晚扣减这才能支撑效期管理和近效期预警。提示药品表中还有一个容易遗漏的字段是storage_condition存储条件比如2-8℃冷藏或阴凉干燥处保存。药房盘点时核对存储条件能有效降低药品失效风险。这个字段在进药时顺手录入就行收益却很大。3. 核心功能实现与关键代码数据库设计好之后进入编码阶段。我按模块拆开讲几个实现过程中最有价值的技术点包含可直接参考的代码片段和设计思路。3.1 门诊流程接口的实现框架整个系统我采用Restful风格接口统一返回格式设计为Result对象包含code、message、data三个字段。所有Controller返回的都是这个对象前端根据code判断业务成功或失败。为什么不用HTTP状态码直接表示业务状态因为业务上有很多参数合法但业务状态不对的情况比如该患者已过号不能直接就诊——HTTP 200但业务码是10086前后端交互更清晰也更方便前端统一弹窗提示。核心上报代码示例PostMapping(/visit/start) public ResultString startVisit(RequestBody VisitStartDTO dto) { // 1. 校验预约状态 Appointment appointment appointmentService.getById(dto.getAppointmentId()); if (appointment null) { return Result.error(预约记录不存在); } if (!AppointmentStatus.PENDING.equals(appointment.getStatus())) { return Result.error(当前预约状态不允许就诊); } // 2. 更新病历信息和预约状态 MedicalRecord record new MedicalRecord(); record.setPatientId(appointment.getPatientId()); record.setDoctorId(appointment.getDoctorId()); record.setAppointmentId(dto.getAppointmentId()); record.setChiefComplaint(dto.getChiefComplaint()); record.setPresentIllness(dto.getPresentIllness()); record.setCreateTime(LocalDateTime.now()); medicalRecordService.save(record); appointment.setStatus(AppointmentStatus.VISITED); appointmentService.updateById(appointment); // 3. 接诊成功 return Result.success(record.getRecordNo()); }这段代码虽然简单但包含了一个很重要的编程习惯——业务状态校验放在所有写操作之前。我在开发过程中发现很多初学者习惯上来就做数据变更写到一半才想起来校验状态结果要么事务回滚处理得乱七八糟要么产生了脏数据。把校验前置是一个非常好用的防错习惯。3.2 挂号与并发控制挂号的并发问题是诊所系统最容易翻车的地方。设想一个场景一个医生半天放号30个只剩最后1个号时两个患者同时在前台挂号如果不加控制数据库里可能出现两条挂号记录都成功的脏数据。我采用的方案是数据库层面的乐观锁在appointment表里加version字段。更新时带上version条件如果更新影响行数为0说明版本已变更立刻返回错误提示重新选择号源。Update(UPDATE appointment SET patient_id #{patientId}, status 1, version version 1 WHERE id #{id} AND version #{version} AND status 0) int takeAppointment(Param(id) Long id, Param(patientId) Long patientId, Param(version) Integer version);这里最重要的是where条件里带了status 0双重校验保证只有待就诊状态的号源能被占用。我用JMeter模拟了100个并发请求抢最后1个号结果只有1条成功其余全部返回号源已被占用效果达到预期。注意用乐观锁的前提是冲突发生频率不高。诊所的号源冲突率本来就不高用乐观锁比用Redis分布式锁简单得多也少引入一个中间件依赖。如果某天业务量大到冲突严重再把扣号逻辑改成SQL层面的原子更新也不迟。3.3 处方与收费模块的联动设计处方开立和收费结算之间有一个必须处理好的联动逻辑——一次开方收费为凭发药为证。我在实现时用了一个数据库事务来保证处方保存和收费状态的原子性Transactional(rollbackFor Exception.class) public ResultString createPrescriptionAndCharge(PrescriptionDTO dto) { // 1. 校验处方是否重复提交 Long patientId dto.getPatientId(); if (prescriptionService.existsUnfinishedPrescription(patientId)) { return Result.error(该患者存在未完成的处方请先处理); } // 2. 计算处方总金额 BigDecimal totalAmount BigDecimal.ZERO; for (PrescriptionItemDTO item : dto.getItems()) { Drug drug drugService.getById(item.getDrugId()); if (drug null) { throw new BizException(药品不存在: item.getDrugId()); } // 校验库存是否充足 if (drug.getStockQuantity() item.getQuantity()) { throw new BizException(药品库存不足: drug.getDrugName()); } item.setSalePrice(drug.getSalePrice()); totalAmount totalAmount.add(drug.getSalePrice().multiply(BigDecimal.valueOf(item.getQuantity()))); } // 3. 保存处方主表和明细 Prescription prescription new Prescription(); prescription.setPatientId(patientId); prescription.setDoctorId(dto.getDoctorId()); prescription.setTotalAmount(totalAmount); prescription.setStatus(PrescriptionStatus.UNPAID); prescriptionService.save(prescription); // 批量保存明细 ListPrescriptionItem items new ArrayList(); for (PrescriptionItemDTO item : dto.getItems()) { PrescriptionItem pi new PrescriptionItem(); pi.setPrescriptionId(prescription.getId()); pi.setDrugId(item.getDrugId()); pi.setQuantity(item.getQuantity()); pi.setSalePrice(item.getSalePrice()); items.add(pi); } prescriptionItemService.saveBatch(items); // 4. 生成收费单 ChargeRecord charge new ChargeRecord(); charge.setPrescriptionId(prescription.getId()); charge.setPatientId(patientId); charge.setAmount(totalAmount); charge.setStatus(ChargeStatus.UNPAID); chargeRecordService.save(charge); return Result.success(prescription.getId().toString()); }我在开发中发现很多人容易把处方状态和收费状态混为一谈直接用一个字段表达。实际上这两个状态必须分开维护因为业务上存在处方开好了但患者没去缴费和患者缴费了但药房还没发药两种完全不同的事项。合并会导致状态判断纠缠不清后面做统计报表时更是灾难。3.4 药品发药与库存扣减的先进先出发药时扣减库存我采用了批号维度先进先出FIFO策略。实现逻辑是按效期排序扣减Transactional(rollbackFor Exception.class) public ResultVoid dispenseDrugs(Long prescriptionId) { Prescription prescription prescriptionService.getById(prescriptionId); // 只允许已收费的处方进行发药 if (!PrescriptionStatus.PAID.equals(prescription.getStatus())) { return Result.error(处方未缴费无法发药); } ListPrescriptionItem items prescriptionItemService.listByPrescriptionId(prescriptionId); for (PrescriptionItem item : items) { // 查询该药品的所有批次按效期升序 ListDrugBatch batches drugBatchService.listByDrugIdOrderByExpireDate(item.getDrugId()); Integer remainingQty item.getQuantity(); for (DrugBatch batch : batches) { if (remainingQty 0) { break; } // 有效批次库存足够时进行扣减 if (batch.getStockQuantity() remainingQty) { batch.setStockQuantity(batch.getStockQuantity() - remainingQty); drugBatchService.updateById(batch); remainingQty 0; } else { // 批次库存不足全部扣减后继续下一个批次 remainingQty - batch.getStockQuantity(); batch.setStockQuantity(0); drugBatchService.updateById(batch); } } if (remainingQty 0) { throw new BizException(药品库存不足无法完成发药); } } prescription.setStatus(PrescriptionStatus.DISPENSED); prescriptionService.updateById(prescription); return Result.success(); }这套逻辑虽然不复杂但必须要配合事务。如果在扣减过程中发现库存不足整个事务回滚不会出现库存扣了但处方状态没更新的不一致情况。3.5 挂号时段的实现挂号时段设计我踩过一个坑。最初设计是直接把时间段写成字符串比如08:00-09:00。后来发现这种方案有太多问题无法判断当前时间是否在时段内、无法生成号源、无法做时段放号限制。最终我采用了标准方案每个时段是一个30分钟或60分钟的slot用start_time字段表示例如08:00、9:00这样前端展示时自己拼成08:00-09:00。生成号源时针对每个时段生成固定数量的号源记录关联doctor和clinic_date。这个设计的好处是放号数量随时可调某个时段可以单独停用挂号时直接锁定具体某一条号源记录并发安全性极高。4. 统计报表与系统管理的补充实现业务模块搞定后统计报表和管理功能算是锦上添花但也是诊所负责人最关心的部分。一家诊所的经营情况、热门科室、药品消耗趋势都来自这些数据的聚合展示。4.1 经营日报与月度趋势我实现了一个定时任务每天早上自动生成前一天的经营日报。聚合逻辑不复杂就是按日期分组统计就诊人数、处方数、收费总金额再按科室维度拆分明细。这里有一个MySQL日期格式化的使用技巧Select(SELECT DATE(create_time) as biz_date, COUNT(*) as visit_count, SUM(amount) as total_amount FROM charge_record WHERE create_time #{startTime} AND create_time #{endTime} GROUP BY DATE(create_time) ORDER BY biz_date) ListDailyReportVO getDailyReport(Param(startTime) LocalDateTime startTime, Param(endTime) LocalDateTime endTime);为什么不直接用GROUP BY DATE(create_time)因为create_time是datetime类型直接按天分组需要MySQL扫描全表做转换数据量上来后性能堪忧。更优方案是在charge_record表上增加一个biz_date字段插入时直接存YYYY-MM-DD格式然后对biz_date建索引。这就相当于用空间换时间保证了报表查询的响应速度。4.2 权限控制的详细实现管理后台和医生工作台的权限必须严格隔离。管理员能看所有患者信息、财务报表、系统配置医生只能看自己的患者、开自己的处方。我用Spring Security做了一套简洁的RBAC权限模型用户表user存登录账号、密码BCrypt加密、姓名、关联employee_id角色表role最核心的是ADMIN管理员和DOCTOR医生用户角色关联表user_role建立多对多关系接口层面我用PreAuthorize注解做方法级权限控制PreAuthorize(hasRole(DOCTOR)) GetMapping(/doctor/my-patients) public ResultListPatientVO myPatients() { // 只返回当前登录医生接诊过的患者 Long doctorId SecurityUtils.getCurrentDoctorId(); return Result.success(patientService.listVisitedByDoctor(doctorId)); }这个SecurityUtils.getCurrentDoctorId()是我封装的一个工具方法从JWT解析出当前登录用户的ID再关联查询医生ID。这套权限控制虽然不复杂但有效避免了医生越权查看其他医生患者信息的风险。注意权限控制不要在Controller里写死逻辑判断比如if(user.getRole() DOCTOR)这种。一旦业务规则复杂化这种写法会变成意大利面条而且无法做单元测试。用Spring Security的注解方式业务逻辑和权限逻辑能很好地解耦。5. 排错实录与上线前检查清单开发过程中踩的坑多得数不完这里挑几个典型的记录一下给大家做参考。这些坑我都实际遇到过如果你们在做类似系统大概率也能避开。5.1 典型的连接池与事务失效问题我遇到过最隐蔽的问题是事务失效。有个退费接口看起来有Transactional注解但实际执行时事务完全没有生效。排查了半天原因是在同一个类内部调用了一个带Transactional的方法——这个方法被调用时绕过Spring的代理对象事务注解不生效。这是Spring事务管理一个很经典的坑// 错误示范 public class RefundServiceImpl { public void refund(Long chargeId) { // 这里的this指向当前对象而不是代理对象 this.processRefund(chargeId); } Transactional public void processRefund(Long chargeId) { // 此处事务不生效 } }解决方式很简单把processRefund方法拆分到另一个Service类中或者通过AopContext.currentProxy()来调用。更推荐的做法是把事务边界设计在Controller调用的Service入口方法上类内部永远不互相调用事务方法。另一个高频坑是MyBatis-Plus的LocalDateTime和MySQL时区不一致。开发机环境时间正常测试环境上传数据后发现所有时间都差了8小时。原因是JDBC连接串里没有配置serverTimezone参数MySQL 8.0默认用的是UTC时区。解决方式是在连接串里明确设置jdbc:mysql://localhost:3306/clinic?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalse5.2 性能优化与隐患清单最多时候这个系统同时在线大约40个终端前台、药房、医生诊室、缴费窗口数据库并发并不高但我要说的不是大流量性能问题而是小系统的大坑。第一个隐患是N1查询问题。很多枚举字段、关联字段都懒加载如果业务代码中循环查询数据库比如遍历处方列表时去查每个患者的名字、每个医生的名字一次请求就可能产生几十条SQL。我在处方列表页面加了一个数据监控发现最极端的情况下渲染一个20条的处方列表竟然产生了83条SQL。后来用MyBatis-Plus的TableField(exist false)字段配合SQL联表查询一次性把关联数据查出来SQL数量降到了1条。第二个隐患是文件上传路径的安全问题。诊所系统会有检查报告的图片上传如果直接把上传路径暴露给前端别人可能通过路径遍历、上传特殊文件名来攻击服务器。我用UUID做文件名并且把上传目录放在应用外部不在Web容器的发布目录内从根子上避免了这个风险。第三个隐患是密码安全。JWT的密钥不能硬编码在代码里我放在application.yml中并且要求生产环境的配置文件和代码分离。密码哈希用BCrypt算法不要用MD5或SHA256这些已经不适合存储密码的方案。提示上线前一定要做一次全流程的回归测试拿真实业务数据走一遍建档-挂号-接诊-开方-收费-发药-退费-退号的完整链路。我见过不少系统上线后第一天就在退费环节崩了因为这种边界业务的测试覆盖率最容易被忽视。6. 一点实操心得就这样这套诊所管理系统从零到落地用了大约一个半月的时间。其间加了无数次班改了几十版细节最终成果大概覆盖了诊所90%的日常业务剩余的10%靠人工处理我觉得这是合理的度——一个系统没必要把所有事都包圆有些特殊场景用Excel表格兜底反而更灵活。我最大的体会是像诊所管理系统这样的业务系统真正难的不是技术而是对业务的理解程度。比如患者档案的唯一性校验、处方的状态流转、药品批号和效期的管理这些都属于不做系统也能诊所但做系统时必须想清楚的问题。一旦想清楚了Spring Boot实现起来其实很快。最后分享一个小技巧上线后要安排诊所的前台或者药房人员每天随手勾选一下系统使用问题反馈这个功能让用户主动汇报不适感。很多时候他们不会主动找你说但一个不顺手的小细节长期积累下来就可能变成对系统的整体不信任。反过来及时响应这些小需求哪怕只是加一个快捷键、调一个默认值用户的接受度和配合度都会高很多。系统好不好用终究是用的人说了算。

相关新闻

Spring Boot诊所管理系统核心设计与实战避坑指南

Spring Boot诊所管理系统核心设计与实战避坑指南

1. 项目启动前的核心定位思考手上有个小型诊所的管理系统需求,第一反应可能有人觉得这不就是一套CRUD吗,做个增删改查不就完事了。真动手做才发现,诊所管理系统比表面上看起来要复杂不少,它牵扯的不仅仅是数据录入和展示&#xff…

2026/10/14 3:51:40 阅读更多 →
哈希表、滑动窗口、二叉树:力扣刷题思路与边界复盘

哈希表、滑动窗口、二叉树:力扣刷题思路与边界复盘

2026年1月21日,今天的力扣刷题我选了三个方向:哈希表、滑动窗口、二叉树。安排这个组合不是随手点题,而是有意为之。刷题这件事,很多人从一开始就理解偏了,以为做得多、做得快就是厉害,其实真正的门槛在于能…

2026/10/14 3:51:40 阅读更多 →
HOL4列表与集合证明实战:操作系统形式化验证的基础打法

HOL4列表与集合证明实战:操作系统形式化验证的基础打法

两年前我第一次接触操作系统形式化验证时,导师递给我一个任务:验证一个迷你调度器的就绪队列性质。我当时的反应和大多数人一样——队列不就是个列表嘛,往里塞任务再取出来,这个有什么好证的?结果真上手才发现&#xf…

2026/10/14 3:51:40 阅读更多 →

最新新闻

用Bellman-Ford吃透LeetCode 743:松弛思想才是最短路径的灵魂

用Bellman-Ford吃透LeetCode 743:松弛思想才是最短路径的灵魂

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

2026/10/14 4:43:56 阅读更多 →
PPT工程化方法论:从单次文档到可迭代信息产品

PPT工程化方法论:从单次文档到可迭代信息产品

1. “PPT-Master”不是软件,而是一套可复用的PPT工程化方法论“PPT-Master”这个词最近在多个设计协作群、高校教学支持论坛和企业内训材料里高频出现,但它既不是某款新发布的商业软件,也不是某个开源项目仓库名——它本质上是一类高度结构化…

2026/10/14 4:43:56 阅读更多 →
C#初学者练手项目:从零实现控制台贪吃蛇

C#初学者练手项目:从零实现控制台贪吃蛇

1. 为什么我建议每个C#初学者都从贪吃蛇开始练手如果你刚学完C#的变量、循环和条件判断,正对着控制台里那几行Console.WriteLine发呆,不知道该拿这些语法做点什么——我的建议很直接:写一个贪吃蛇。不是因为它简单,恰恰是因为它&q…

2026/10/14 4:43:56 阅读更多 →
Oracle数据库卡顿排查:alert日志与AWR/ASH时间线还原实战

Oracle数据库卡顿排查:alert日志与AWR/ASH时间线还原实战

最近有个刚转DBA的朋友问我一个问题:业务反馈数据库卡顿,他第一件事就是翻alert日志,结果翻了大半天,连个ORA-报错都没看到,彻底不知道下一步该干嘛了。这个场景我太熟悉了——排查卡顿相关日志,核心压根不…

2026/10/14 4:43:56 阅读更多 →
QBE示例查询:从填表到SQL的查询思维入门

QBE示例查询:从填表到SQL的查询思维入门

“QBE”这个词,如果你不是数据库方向的老鸟,可能第一眼有点陌生。它是 Query By Example 的缩写,中文常译作“示例查询”,一种在关系数据库发展早期非常有代表性的查询方式。简单说,SQL 是靠写一串命令来查数据&#x…

2026/10/14 4:43:56 阅读更多 →
Poppy协议解读:AI代理必须亮明身份,透明化接入实战

Poppy协议解读:AI代理必须亮明身份,透明化接入实战

最近AI圈有件值得专门聊聊的事:一家长期深耕对话式AI的团队,公开了一份叫“Poppy协议”的行为约束规范。名字听上去挺植物系,实际内容是给所有AI代理立下一套“必须表明自己不是人类”的规则。核心就一句话:AI代理可以继续干活&am…

2026/10/14 4:42:56 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →