<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>陈俊伟的个人博客 — 2026 技术笔记</title>
  <link href="https://hzhou.site/"/>
  <id>https://hzhou.site/</id>
  <updated>2026-09-23T12:00:00+08:00</updated>
  <author><name>陈俊伟</name></author>
  <entry>
    <title>让劳务公司在线填表（二）：飞书在线表格 + 编辑事件自动同步</title>
    <link href="https://hzhou.site/pages/article-27-feishu-online-sheet.html"/>
    <id>https://hzhou.site/pages/article-27-feishu-online-sheet.html</id>
    <updated>2026-09-23T12:00:00+08:00</updated>
    <summary>外部填表从自托管 Nextcloud 换到飞书在线表格：加密链接 + 密码的访问模型，企业自建应用 + 云文档 API 把数据读回钉钉表，并用编辑事件 + 长连接实现有人改就自动同步（免定时、免公网 IP）；附长数字文本格式、wiki 节点解析与写后对账等踩坑清单。</summary>
    <category term="DevOps"/>
  </entry>
  <entry>
    <title>让劳务公司在线填表（一）：Nextcloud + OnlyOffice 自托管协作实录</title>
    <link href="https://hzhou.site/pages/article-26-online-sheet-fill.html"/>
    <id>https://hzhou.site/pages/article-26-online-sheet-fill.html</id>
    <updated>2026-09-21T12:00:00+08:00</updated>
    <summary>三家劳务公司的名单从微信传 Excel 搬进浏览器：单文件独立共享、只读模板保护、内容级变更通知与单会话强退，以及 mod_remoteip、OnlyOffice 模块依赖两个自托管深坑。</summary>
    <category term="DevOps"/>
  </entry>
  <entry>
    <title>钉钉群文件 API 实战：从群 ID 到下载直链的五个坑</title>
    <link href="https://hzhou.site/pages/article-23-dingtalk-group-files.html"/>
    <id>https://hzhou.site/pages/article-23-dingtalk-group-files.html</id>
    <updated>2026-09-07T12:00:00+08:00</updated>
    <summary>我做的低代码自动化里有一类高频需求：HR 在钉钉群里维护一份 Excel（编制表、花名册），定时任务把群里最新版本自动同步进业务系统。整条链路的第一步，是把"群文件区里的某个 xlsx"稳定地拉下来——听起来是个五分钟的</summary>
    <category term="低代码"/>
  </entry>
  <entry>
    <title>用群文件当数据库：页面改动保护与差异同步引擎</title>
    <link href="https://hzhou.site/pages/article-24-diff-sync-engine.html"/>
    <id>https://hzhou.site/pages/article-24-diff-sync-engine.html</id>
    <updated>2026-09-07T12:00:00+08:00</updated>
    <summary>上一篇写了怎么把钉钉群文件区的 xlsx 稳定拉到本地。但拉下来只是开始——真正的难题是怎么把文件内容写进业务表单。这篇写这条链路的下半场：一个跑了数月的差异同步引擎，核心要回答三个问题：</summary>
    <category term="低代码"/>
  </entry>
  <entry>
    <title>宜搭匿名访问困境：登录墙、白名单与对象存储快照兜底</title>
    <link href="https://hzhou.site/pages/article-25-anonymous-access.html"/>
    <id>https://hzhou.site/pages/article-25-anonymous-access.html</id>
    <updated>2026-09-07T12:00:00+08:00</updated>
    <summary>低代码平台的数据页面，默认是长在登录体系里的：组织内的人打开页面，自动带着登录态查数据。但有一类需求偏偏要给"不在组织里的人"用——我们厂区的门岗保安不在公司钉钉组织内，却要查"某员工是否被批准携带手机进入生产区域"。权</summary>
    <category term="低代码"/>
  </entry>
  <entry>
    <title>宜搭“假成功”静默失败三连：接口返回 success，数据却没落库</title>
    <link href="https://hzhou.site/pages/article-20-yida-fake-success.html"/>
    <id>https://hzhou.site/pages/article-20-yida-fake-success.html</id>
    <updated>2026-08-27T12:00:00+08:00</updated>
    <summary>2026 年 8 月，我在用低代码平台（宜搭 / openyida CLI）做人事数据自动化的过程中，先后撞上了三起同一种毛病的接口问题：接口返回 success:true，但数据根本没有落库。全程零报错、零告警，调用方</summary>
    <category term="低代码"/>
  </entry>
  <entry>
    <title>canvas 编译器改写缺陷实录：五个版本事故换来的 6 条避坑清单</title>
    <link href="https://hzhou.site/pages/article-21-canvas-compiler-defects.html"/>
    <id>https://hzhou.site/pages/article-21-canvas-compiler-defects.html</id>
    <updated>2026-08-27T12:00:00+08:00</updated>
    <summary>低代码平台的自定义页面（canvas）走的是一条特殊的编译管线：你写的 React + antd 源码要经过平台的编译器改写后再发布上线。这条管线和原生 Babel / SWC 的行为并不一致——2026 年 8 月下旬</summary>
    <category term="低代码"/>
  </entry>
  <entry>
    <title>原生报表按年聚合困境：timeGranularityType 硬编码与被升级覆盖的补丁</title>
    <link href="https://hzhou.site/pages/article-22-report-timegranularity.html"/>
    <id>https://hzhou.site/pages/article-22-report-timegranularity.html</id>
    <updated>2026-08-27T12:00:00+08:00</updated>
    <summary>人事分析里有几张最基础的图：「历年入职人数」「历年离职人数」「各年入职人员现状（留存）」。它们的共同点是 x 轴要按年分组——按天出数的话，一张「历年趋势」会展开成几百个数据点，完全不可用。</summary>
    <category term="低代码"/>
  </entry>
  <entry>
    <title>钉钉加班审批自动转入调休余额：连接流 + FaaS 实战</title>
    <link href="https://hzhou.site/pages/article-10-dingtalk-overtime.html"/>
    <id>https://hzhou.site/pages/article-10-dingtalk-overtime.html</id>
    <updated>2026-08-03T12:00:00+08:00</updated>
    <summary>加班审批通过后，需要把加班时长自动折算成调休余额（假期额度）转入员工的假期账户。但钉钉自带的「调休」假期类型只有 1 个，无法按不同有效期、不同部门拆分配置。于是这次二开通过 API 新建了 1 个自定义假期类型，并在此</summary>
    <category term="自动化"/>
  </entry>
  <entry>
    <title>测试基建四件套：Testcontainers、PIT 变异测试、Playwright、JaCoCo</title>
    <link href="https://hzhou.site/pages/article-19-smartoa-testing.html"/>
    <id>https://hzhou.site/pages/article-19-smartoa-testing.html</id>
    <updated>2026-07-28T12:00:00+08:00</updated>
    <summary>SmartOA 测试基建在 7 月底集中升级（INF-1~8），目标很朴素：让测试真正拦住回归。四件套：本地 MySQL 测试基类（替代 Testcontainers）、PIT 变异测试、Playwright E2E 冒</summary>
    <category term="SmartOA"/>
  </entry>
  <entry>
    <title>Warm-Flow 工作流事故：一个 skip 引发的驳回灾难</title>
    <link href="https://hzhou.site/pages/article-18-smartoa-warmflow-skip.html"/>
    <id>https://hzhou.site/pages/article-18-smartoa-warmflow-skip.html</id>
    <updated>2026-07-14T12:00:00+08:00</updated>
    <summary>2026 年 7 月，SmartOA 上线了一个「隐蔽的事故级 bug」：所有审批的驳回/拒绝操作全部报错「未找到跳转类型匹配的目标节点!」，钉钉卡片审批和网页审批同时受影响。根因不是流程设计错了，而是选错了框架 API</summary>
    <category term="SmartOA"/>
  </entry>
  <entry>
    <title>气象灾害预警：定时任务 + 钉钉群聊卡片投递</title>
    <link href="https://hzhou.site/pages/article-17-smartoa-weather.html"/>
    <id>https://hzhou.site/pages/article-17-smartoa-weather.html</id>
    <updated>2026-07-08T12:00:00+08:00</updated>
    <summary>公司要实时关注广东气象局发布的灾害预警（台风、暴雨、高温……），第一时间推送到钉钉群。SmartOA 实现：定时任务扫描广东气象局预警数据 → 解析预警级别 → 钉钉互动卡片投递到群聊，卡片带详情链接和级别图标。这篇记录</summary>
    <category term="SmartOA"/>
  </entry>
  <entry>
    <title>ITAM 资产管理：固定资产全生命周期模块</title>
    <link href="https://hzhou.site/pages/article-16-smartoa-itam.html"/>
    <id>https://hzhou.site/pages/article-16-smartoa-itam.html</id>
    <updated>2026-07-02T12:00:00+08:00</updated>
    <summary>SmartOA 的 ITAM（IT Asset Management）模块管理固定资产全生命周期：台账 → 入库 → 领用 → 借用 → 维修 → 报废，附带耗材管理、采购申领、钉钉卡片审批。模块从零搭建（后端 + 前端</summary>
    <category term="SmartOA"/>
  </entry>
  <entry>
    <title>钉钉互动卡片审批：五阶段集成实战</title>
    <link href="https://hzhou.site/pages/article-15-smartoa-dingtalk-card.html"/>
    <id>https://hzhou.site/pages/article-15-smartoa-dingtalk-card.html</id>
    <updated>2026-06-26T12:00:00+08:00</updated>
    <summary>SmartOA 的审批流要推送到钉钉：审批发起后在钉钉群/单聊收到互动卡片，卡片上直接点「同意/拒绝」就能完成审批，状态实时回写。整个集成拆成五个阶段逐步落地（基础设施 → 卡片发送 → Stream 回调 → 待办同步</summary>
    <category term="SmartOA"/>
  </entry>
  <entry>
    <title>数据库字段加密实战：@EncryptField 与 MyBatis 拦截器</title>
    <link href="https://hzhou.site/pages/article-14-smartoa-encrypt.html"/>
    <id>https://hzhou.site/pages/article-14-smartoa-encrypt.html</id>
    <updated>2026-06-22T12:00:00+08:00</updated>
    <summary>三级等保要求敏感字段（手机号、身份证、银行卡等）在数据库里不能明文存储。SmartOA 的方案是 @EncryptField 注解 + MyBatis 拦截器：写库自动加密、读库自动解密，业务代码无感。但实现过程中踩了一</summary>
    <category term="SmartOA"/>
  </entry>
  <entry>
    <title>等保安全加固 P0：从 SQL 注入到 httpOnly Cookie</title>
    <link href="https://hzhou.site/pages/article-13-smartoa-security-p0.html"/>
    <id>https://hzhou.site/pages/article-13-smartoa-security-p0.html</id>
    <updated>2026-06-20T12:00:00+08:00</updated>
    <summary>SmartOA 要过三级等保，安全审计拆出 P0~P3 四级问题。P0 是必须立刻修的：SQL 注入、路径遍历、IP 伪造、默认密码、明文 token。这一批修复横跨后端（拦截器/加密/权限）与前端（加密方案），每一条都</summary>
    <category term="SmartOA"/>
  </entry>
  <entry>
    <title>Jackson 2→3 全量迁移：405 个 Java 文件的手术</title>
    <link href="https://hzhou.site/pages/article-12-smartoa-jackson3.html"/>
    <id>https://hzhou.site/pages/article-12-smartoa-jackson3.html</id>
    <updated>2026-06-07T12:00:00+08:00</updated>
    <summary>SmartOA 后端升级到 Spring Boot 4 后，Jackson 也迎来了大版本跃迁：Jackson 2.x → 3.x（tools.jackson）。包名从 com.fasterxml.jackson 换成 </summary>
    <category term="SmartOA"/>
  </entry>
  <entry>
    <title>TypeScript 严格化大迁移：157 个类型错误清零之路</title>
    <link href="https://hzhou.site/pages/article-11-smartoa-ts-migration.html"/>
    <id>https://hzhou.site/pages/article-11-smartoa-ts-migration.html</id>
    <updated>2026-05-30T12:00:00+08:00</updated>
    <summary>SmartOA 前端是从 SmartAdmin V3 二次开发的，早期代码处于「能跑就行」的状态：157 个 vue-tsc 类型错误、大面积 any、API 返回类型全靠猜。2026 年 5 月底，我决定一次性把类型体</summary>
    <category term="SmartOA"/>
  </entry>
  <entry>
    <title>MinIO vs 国内 OSS：能做免费平替吗？</title>
    <link href="https://hzhou.site/pages/article-09-minio.html"/>
    <id>https://hzhou.site/pages/article-09-minio.html</id>
    <updated>2026-05-18T12:00:00+08:00</updated>
    <summary>阿里云 OSS、腾讯云 COS、七牛 Kodo——国内开发者的对象存储三件套。好用，但账单不好看。MinIO 是一个开源、S3 兼容的自建对象存储，号称能替代云 OSS。到底能不能？什么时候能？什么时候不该？这篇文章讲清</summary>
    <category term="DevOps"/>
  </entry>
  <entry>
    <title>帐篷式台牌生成器：批量打印技术文档</title>
    <link href="https://hzhou.site/pages/nameplate-generator.html"/>
    <id>https://hzhou.site/pages/nameplate-generator.html</id>
    <updated>2026-05-14T12:00:00+08:00</updated>
    <summary>开会、培训、接待——桌上的姓名台牌是刚需。手写太慢，Word 排版太丑，批量打印还要一个个复制粘贴。台牌生成器把这件事变成 3 秒搞定：输入姓名 → 生成 A4 页面 → 直接打印，帐篷式折叠即用。</summary>
    <category term="前端工具"/>
  </entry>
  <entry>
    <title>iPrint：智能打印管理平台</title>
    <link href="https://hzhou.site/pages/iprint-cups.html"/>
    <id>https://hzhou.site/pages/iprint-cups.html</id>
    <updated>2026-05-11T12:00:00+08:00</updated>
    <summary>企业打印场景的痛点是什么？模板散落在各系统、打印机对接复杂、批量打印需要手写逻辑、Excel 数据还要手动搬运。iPrint 把这些全部收进一个平台：模板管理 → 数据渲染 → CUPS 打印 → 任务追踪，全链路自动化</summary>
    <category term="架构"/>
  </entry>
  <entry>
    <title>Hermes Gateway：统一 OpenAI 兼容 API 网关</title>
    <link href="https://hzhou.site/pages/openai-compatible-api.html"/>
    <id>https://hzhou.site/pages/openai-compatible-api.html</id>
    <updated>2026-04-24T12:00:00+08:00</updated>
    <summary>微信 Bot、外部 API 调用、未来的新渠道——每个入口各自接入模型、各自管理配置、各自维护记忆？不。Hermes Gateway 做一件事：让所有渠道共享同一个大脑。统一配置、统一记忆、统一 API 格式。下游接什么</summary>
    <category term="架构"/>
  </entry>
  <entry>
    <title>快递揽收单 &amp; 标签模板自动生成器</title>
    <link href="https://hzhou.site/pages/generate_sheets_article.html"/>
    <id>https://hzhou.site/pages/generate_sheets_article.html</id>
    <updated>2026-04-07T12:00:00+08:00</updated>
    <summary>一份「源数据」Excel，几十个需求单号，采购单号用斜杠拼接——仓库同事原本要花一整个下午手工拆表。这个脚本双击运行，3 秒出结果，自动处理 PO 拆分、箱数均分、城市提取，并保留原 Excel 模板格式。</summary>
    <category term="自动化"/>
  </entry>
  <entry>
    <title>WPS 公式图片 → Excel 浮动图片 转换工具</title>
    <link href="https://hzhou.site/pages/article-wps-convert.html"/>
    <id>https://hzhou.site/pages/article-wps-convert.html</id>
    <updated>2026-04-03T12:00:00+08:00</updated>
    <summary>WPS Office 粘贴截图时会生成 =DISPIMG("ID_xxx",1) 公式嵌入图片，这类图片在 Microsoft Excel 中无法正常显示。这个工具自动把所有公式图片提取为 Excel 原生浮动图片，精确</summary>
    <category term="工具"/>
  </entry>
  <entry>
    <title>Python 异步任务队列实践</title>
    <link href="https://hzhou.site/pages/article-04-python-async-queue.html"/>
    <id>https://hzhou.site/pages/article-04-python-async-queue.html</id>
    <updated>2026-03-23T12:00:00+08:00</updated>
    <summary>异步任务队列是后端系统的基础设施之一。本文对比 Celery、RQ 和 Dramatiq 三种方案，分享在实际项目中选型和优化的经验。</summary>
    <category term="Python"/>
  </entry>
  <entry>
    <title>钉钉 OA 审批与中通快递 API 对接实战</title>
    <link href="https://hzhou.site/pages/article-01-dingtalk-express.html"/>
    <id>https://hzhou.site/pages/article-01-dingtalk-express.html</id>
    <updated>2026-03-19T12:00:00+08:00</updated>
    <summary>在日常企业运营中，审批通过后手动下单快递是一个高频重复劳动。本文记录了如何通过钉钉开放平台，实现审批通过后自动调用中通快递 API 下单并打印电子面单的完整流程。</summary>
    <category term="自动化"/>
  </entry>
  <entry>
    <title>Caddy：替代 Nginx 的现代方案</title>
    <link href="https://hzhou.site/pages/article-02-caddy-modern.html"/>
    <id>https://hzhou.site/pages/article-02-caddy-modern.html</id>
    <updated>2026-03-15T12:00:00+08:00</updated>
    <summary>Nginx 用了这么多年，一直觉得它的配置语法反人类。直到遇到 Caddy —— 自动 HTTPS、简洁的 Caddyfile、原生 HTTP/3 支持，让我决定在新项目中全面切换。本文对比两者差异，分享生产环境配置经验</summary>
    <category term="DevOps"/>
  </entry>
  <entry>
    <title>Kimi K2 Chat — Python Tkinter 对话框客户端</title>
    <link href="https://hzhou.site/pages/article-03-python-tkinter-chat.html"/>
    <id>https://hzhou.site/pages/article-03-python-tkinter-chat.html</id>
    <updated>2026-03-08T12:00:00+08:00</updated>
    <summary>用 Python 标准库 tkinter 做一个本地 ChatGPT 风格的桌面客户端，对接 NVIDIA NIM 上的 Kimi K2 模型。支持流式输出、Token 上下文管理、Tokyo Night 主题——不用装</summary>
    <category term="Python"/>
  </entry>
  <entry>
    <title>Git 工作流与 CI/CD 自动化</title>
    <link href="https://hzhou.site/pages/article-06-git-cicd.html"/>
    <id>https://hzhou.site/pages/article-06-git-cicd.html</id>
    <updated>2026-03-01T12:00:00+08:00</updated>
    <summary>好的 Git 工流不只是分支命名规范，更是一套让团队协作高效、发布安全可控的完整体系。本文分享适合小团队（3-5人）的简化 Git Flow 和 CI/CD 配置。</summary>
    <category term="DevOps"/>
  </entry>
  <entry>
    <title>Redis 缓存策略与常见陷阱</title>
    <link href="https://hzhou.site/pages/article-07-redis-cache.html"/>
    <id>https://hzhou.site/pages/article-07-redis-cache.html</id>
    <updated>2026-02-13T12:00:00+08:00</updated>
    <summary>Redis 缓存用得好，系统性能翻倍；用不好，缓存雪崩、穿透、击穿三连暴击。本文总结了三种经典缓存策略和它们各自的适用场景与坑点。</summary>
    <category term="后端"/>
  </entry>
  <entry>
    <title>PostgreSQL 查询优化实战</title>
    <link href="https://hzhou.site/pages/article-08-pg-optimization.html"/>
    <id>https://hzhou.site/pages/article-08-pg-optimization.html</id>
    <updated>2026-01-23T12:00:00+08:00</updated>
    <summary>一个慢查询从 8 秒优化到 50 毫秒的过程。本文通过一个真实案例，讲解 EXPLAIN ANALYZE 的使用、索引策略以及常见的查询反模式。</summary>
    <category term="后端"/>
  </entry>
  <entry>
    <title>Docker Compose 生产环境编排实践</title>
    <link href="https://hzhou.site/pages/article-05-docker-compose.html"/>
    <id>https://hzhou.site/pages/article-05-docker-compose.html</id>
    <updated>2025-07-23T12:00:00+08:00</updated>
    <summary>Docker Compose 不只是开发工具。在中小规模生产环境中，它同样能胜任。本文分享如何用 Compose 编排一个包含 6 个服务的完整应用栈，以及踩过的坑。</summary>
    <category term="DevOps"/>
  </entry>
</feed>
