2026年02月02日
内容截止日: 2026年02月08日
本周工作计划与执行完成进度
中心服务平台 - 功能完善
- 目标: 控制变更范围,降低引入风险,实现面向客户可用的初步功能体验。
- 进度: 🔘 未开始 -> 🟡 进行中 -> ⚠️ 部分完成 -> ✅ 已完成 -> 📌 已自测
以往已完成的工作不再重复,详情请查看上周及上月报告- 〔工作量〕es-center-server-services 80 次(设计 28 · 代码 52)· 代码 +5.8k/-6.7k | es-center-server-web-app 8 次 · 代码 +0.3k | es-center-server-install-app 11 次(设计 2 · 代码 9)· 代码 +0.6k/-0.2k | es-center-server-build 2 次 · 代码 +0.1k/-0.1k | es-server-deploy 1 次
- 〔方法论〕测试驱动缺陷收敛(主线流程全量/增量验证暴露问题再修复)| 数据同步模块内聚化与工具类精简(归档流程收敛、文件移动原子化、API 精简)| 国际化写入性能优化(内存队列去重 + 流式查询 + 布隆过滤器)| 构建工程化起步(引入 Spotless 格式化)
- 2-02 ~ 2-05: 数据同步导入与文件流转
- ✅ 文件归档统一处理,导入缺陷逐项修复 〔es-center-server-services〕
重构yyyyMMdd 目录名字典序就是日期序,明确保留最新目录的规则而不改变行为。过期目录支持回调:无回调删除,有回调交调用方;主节点将旧 output 转 archive,从节点 input 超过 2 个日期目录时归档更早目录。重构归档、失败和过期清理集中到入口;目录与文件合用移动 API,生命周期路径由映射表计算,并支持 input→failed 自定义映射。2-03 改为原子移动,取消先删目标,避免移动失败时先丢归档数据。排障含下划线的表名原先被截断,改为按最后一个下划线拆分;首分片与导出端对齐为 _0000.jsonl.gz,只有首分片清表。timestamp/date 列用 DataTypeConverter 按数据库元数据转换,兼容 epoch 秒/毫秒和 ISO 日期字符串。实施多列复合主键用于更新与删除条件,空值字段保留;分区表不再用 ON CONFLICT,改为先 UPDATE、未命中再 INSERT,修复丢数据、误删和父表写入问题。排障SFTP 密码中的 @/:/ 分隔符使 Apache Commons VFS2 地址解析失败,迁到 Apache MINA SSHD 后认证信息通过专用 API 传递,连接与文件流自动释放,保留下载扫描、防重和失败清理语义。重构JSONB 是 PostgreSQL 数据库中存储 JSON 数据的类型。读取端先兼容 PGobject(数据库驱动返回的包装对象),用 Gson(JSON 解析工具)取出包装内的实际数据;随后改为导出端直接读取原生字符串,撤掉 Gson 解包层。SQL 生成与导入扫描共用实现。全量/增量导出改为 queryForStream 流式读取,保留空表、按表分批、主键检查与成功写盘后推进日志 ID 的规则。实施导出批量从 1000 提到 5000,从节点轮询从 30 秒缩为 9 秒,清理计数从 100 调至 300,维持约 45 分钟清理节奏。触发器日志区分主/子表,节点入口增加角色守卫。测试主线全量/增量导出覆盖 79 张表,核对目录初始化、文件流转、失败重试、防重、归档与过期清理,抽查 1/10 导出文件;导入也覆盖 79 张表,每次核对主从数据一致性,抽查 1/10 数据库内容。
- ✅ 文件归档统一处理,导入缺陷逐项修复 〔es-center-server-services〕
- 2-03 ~ 2-05: 国际化写入与配套通知
- ✅ 从节点导入配套账号与文件,国际化写入链路完成去重重构 〔es-center-server-services〕
实施新用户、设备和采集服务器数据导入后创建 MQTT 账号,国际化数据导入后生成多语言 JSON。测试用 MQTTX 验证配套账号有效性,核对国际化 JSON 文件内容一致性。重构saveMissing 从 Redis/JMS/虚拟线程链路转为本地队列和 Guava Cache,按租户、语言、命名空间批量处理。引入 TranslationGroup 值对象(将租户、语言、命名空间打包成一组的类型),过滤 PSQLException 脏数据,静态文件只在数据库最大修改时间变化时生成。设计比较现成去重队列后,保留 ConcurrentLinkedQueue + ConcurrentHashMap.newKeySet(),避免新增百行自定义队列。去重和变化追踪形成正式规格,单元、集成和压力测试项仍有未完成项。实施2-05 去重改为布隆过滤器,即低内存的快速重复检测;启动预热、每 15 分钟重建,数据库 count 再精确查重。队列对象携带 tenantId,精简入队签名、分组和 Service/Mapper 层。排障drainQueue 原先只读不删,同一任务每 3 秒反复处理,改为 poll 取出即移除。翻译方法从 private 改为包可见,去掉与调度代理冲突的只读事务。重构翻译文件查询和过滤器预热改 JdbcTemplate queryForStream,资源自动关闭;默认租户结果由当前租户覆盖,待更新标记在 finally 释放。JDBC fetchsize 与翻译调度调研、变更分别归档。
- ✅ 从节点导入配套账号与文件,国际化写入链路完成去重重构 〔es-center-server-services〕
- 2-03 ~ 2-07: 调度、校验与公共库
- ✅ 设备编号校验修复,调度和格式工具按实际负载调整 〔es-center-server-services〕
排障数据采集盒、采集设备和采集服务器按各自领域 ID 排除当前记录,修复更新被误判重复;中间提交误删括号造成新增绕过校验,下一提交立即恢复。实施高频 @Scheduled 任务改延迟字符串与启动等待。2-04 显式线程池先设 4、后设 2,最终撤销 pool 配置,回到虚拟线程/默认调度策略;设备任务等待从 5 分钟降到 1 分钟,从节点从 5→3→1 分钟。这里保留尝试和撤回,不能把显式池当最终状态。设计ktlint 只覆盖 Kotlin,因此保留 Spotless 为 Java/Kotlin 统一格式入口。设备验证修复先建立 OpenSpec 变更,临时工件完成后清理。实施Spotless 升到 8.2.1,统一 1200+ Java/Gradle 文件 import 与排版,Google Java Format 和 Kotlin Gradle 格式化仍禁用;引入 .editorconfig 与两种 pre-commit hook,后于 2-07 移除旧 hooks。重构依赖审计移除未使用的 Boot 处理器和 actuator;gt-common-core 整理集合、AES 异常、安全可见性、空值规范与公共依赖,保留审计和 Spotless 变更记录。
- ✅ 设备编号校验修复,调度和格式工具按实际负载调整 〔es-center-server-services〕
- 2-06 ~ 2-08: 请求上下文与工具环境
- ✅ 客户端真实 IP 识别增强,统一响应初始化附加数据 〔es-center-server-services〕
实施依次读取代理转发头和 RemoteAddr,校验 IPv4/IPv6,跳过私网、链路本地和回环地址;公开 getClientIp 查询接口提供请求方地址。设计为统一响应结构 ApiResult 的附加数据 extraData 制定初始化与合并规格(ApiResult.extraData)。实施从 apiExtraDataSupplier 取得默认附加数据,未配置时回退空 Map;显式数据合并并覆盖同名键,成功/失败响应遵循同一规则。
- ✅ 客户端真实 IP 识别增强,统一响应初始化附加数据 〔es-center-server-services〕
- 2-02 ~ 2-07: 规格工具与知识库
- ✅ 规格工具入口调整,仓库知识库按代码重建 〔es-center-server-services〕
实施2-02 退役 speckit 命令与 .specify;旧 OpenSpec 资产集中清理后重建最小配置,2-07 将工作流迁到 opencode,补执行权限。设计补 AGENTS.md、提示词和公共库整改任务,.ai/repowiki 知识库核对代码后重建,不把已删除脚手架写成仍在启用。
- ✅ 规格工具入口调整,仓库知识库按代码重建 〔es-center-server-services〕
- 2-04 ~ 2-08: 前端工具与下载页
- ✅ v2 APK 下载页提供扫码与浏览器两条通道 〔es-center-server-web-app〕
实施新增 apk-download.html,以 jquery + qrcode.js 动态生成二维码;pony-cam-1.apk 路径两次校正,最终为 /files/apks/pony-cam-1.apk,扫码提示改为手机相机或浏览器。设计修复隐私政策、使用条款中英文文档,补 CLAUDE 和中文 AGENTS 指南。实施前端引入 OpenCode/OpenSpec,检查与格式化从 Biome 调到 oxlint/oxfmt,清理旧审查资料与编辑器模型设置。
- ✅ v2 APK 下载页提供扫码与浏览器两条通道 〔es-center-server-web-app〕
- 2-04 ~ 2-06: 构建兼容与发布物同步
- ✅ 构建脚本完成 POSIX sh 收敛,多环境入口同步新版本 〔es-center-server-install-app〕
排障共享函数库补参数校验、日志、打包、路径加载和严格错误处理;先引入 Bash 依赖,再移除版本检查、pipefail、关联数组、local 和函数导出,最终统一纯 POSIX sh。设计fix-build-sh-script 归档并同步 build-pipeline,记录四类包、NAS 备份、服务器上传、共享配置与测试边界;CLAUDE.md 补构建/测试章节,保留构建与测试约束。实施保存 old_build.sh 作为重构前基线,引入 Claude opsx 命令模板。实施2-04 ~ 2-05,cs-1、ge-zxs-ca/hs、zxs-cs/ls、zxs 的 build.conf、打包和 .env 跟随 02-04/02-05 发布物更新;统一 upload_to_servers.sh,恢复正式目标上传后调整为先 CS 验证目标、再正式目标。
- ✅ 构建仓更新分支与产物位置 〔es-center-server-build〕
实施生成 02-05 产物,Gradle 从 clean build 改 cc build;离线镜像从 /mnt/d/other/tmp 移到 /mnt/d/tmp,同步各目标 SCP/SFTP 引用和编辑器配置。
- ✅ 云端 FRP 访问端口与 LBS 服务对齐 〔es-server-deploy〕
实施visitor 本地监听端口由 8091 改为 8090,同步编辑器默认部署目标。
- ✅ 构建脚本完成 POSIX sh 收敛,多环境入口同步新版本 〔es-center-server-install-app〕
其它工作
- 目标: 记录日常耗时的杂项工作、协作事项,以及必要的沟通、讨论等隐性事务。
- 进度: 🔘 未开始 -> 🟡 进行中 -> ⚠️ 部分完成 -> ✅ 已完成 -> 📌 已自测
以往已完成的工作不再重复,详情请查看上周及上月报告- 03 日
- 自测发现国际化数据入库问题并修复: 前端自动上报的词条没有写入数据库
- 修复韦忠正反馈的修改设备配置时提示问题: 后端验证取值不对,提示
Data acquisition device no exists: HS25020001;
- 04 日
- 原部署在公网服务器上的 lbs 服务切换到内网运行,通过 frp 提供公网访问
- 多次制作更新程序部署至 zxs-cs/zxs-c 上进行测试
- 05 日
- 多次制作更新程序部署至 zxs-cs/zxs-c 上进行测试
- 为印度客户定制开发获取公网 IP 的接口,通过白名单设置,无需 token 即可访问
- 确保所有接口返回的 JSON 数据中都包含 extraData.clientIp 字段
备忘
- 采集服务器调用的同步设备接口需排查 token 验证不通过的问题。
Last updated on