技术博客

生产统计全为 0:用数据库聚合替代全量明细加载

一个订单状态页面在测试环境正常,生产环境的入库、出库和各节点数量却全部显示为 0。页面列表能看到大量订单,数据库也确认近期业务数据存在,因此页面显示的“0”是汇总请求未及时成功返回后的默认值,与实际数据不符。

根因不是索引差异

旧接口为了统计数量,分别发起多次超大分页查询,把明细加载到 Java 后再分组。每次分页还会额外执行 count SQL。一次页面刷新最终串行触发多条重查询。

测试库数据量很小,这种实现仍能在很短时间内返回;生产流转记录规模大几个数量级,同样的查询需要十几到二十多秒,多项统计串行后超过页面等待时间。前端没有明确失败态,于是保留初始化的 0,看起来就像生产没有订单。

两套 …

制作自定义 Codex 动画宠物:从角色图到动画精 …

制作一个 Codex 动画宠物,看起来像“生成一张二次元角色图”,实际上更接近一条小型游戏资产流水线。最终要交付一张动画精灵图集,也就是把所有动作帧按固定网格排列在同一张图中;它不仅要好看,还必须满足固定切片、动作顺序、透明背景、方向一致性和元数据要求。

如果直接让图像模型生成整张精灵表,常见结果是人物比例漂移、格子边界错位、动作重复、不同方向服装细节变化,或者透明通道不干净。这些问题在单张预览里不明显,加载到动画后会立刻暴露。

先固定角色,再生成动作

第一步是建立角色基准图,锁定发型、服装、配色、面部特征和整体比例。所有动作帧都以同一个基准为参考,而不是分别从文字提示重新生成。

动作设计需要 …

物流系统中的公司、经营组织、项目和仓库是什么关系

在物流系统中,公司、经营组织、项目和仓库经常同时出现在登录上下文、业务单据和查询条件里。它们看起来都像“数据归属”,但不能互相替代。

这次我没有按字段名称猜测,而是从主数据表、典型关联 SQL 和用户会话中检查它们的真实用法。

公司:最外层的数据范围

公司或分公司是平台的数据隔离边界,业务表中的 org_id 通常保存公司主数据的内部 ID,而不是公司编码。

大量订单、库存和配置查询都先按 org_id 过滤。它决定当前用户能进入哪一个公司范围,也是项目、仓库和经营组织共同的上级归属。

项目:业务合同或运营项目

project_id 指向项目主数据。一个项目属于某家公司,并通常绑定默认仓库或仓 …

java -version 是 JDK …

一个使用 Gradle 6.8 和 Android Gradle Plugin 4.2 的老 Android 项目,在 extractDeepLinks 任务失败,错误提示 Java 模块没有开放 java.io。这个错误通常出现在老构建工具运行于较新的模块化 JDK 上。

奇怪的是,同一个 PowerShell 窗口执行 java -version 明明显示 JDK 8。继续围绕代码、Manifest 或 Build Tools 警告排查,很可能浪费时间。

PATH 与 JAVA_HOME 不是一回事

java -version 只说明 shell 从 PATH 中找到的 java.exe …

从 Dubbo Connection …

应用日志不断出现 Dubbo RemotingException,最深层异常是 Connection refused。堆栈很长,前面还夹杂业务接口、代理类和重试线程,很容易让人先去检查调用参数或客户端代码。

但 Connection refused 的含义非常具体:目标地址可以路由到,TCP 连接却被立即拒绝。通常是目标端口没有进程监听,或容器刚好停止。它与请求超时、DNS 失败和业务异常不是同一类问题。

沿最深层异常向外验证

排查顺序从网络事实开始:

  1. 消费端最终尝试连接哪个 host 和 port;
  2. 对应端口是否存在监听;
  3. 服务容器是否正在运行、重启或已经退出;
  4. 注册中心是否还保留着失效 …

复制出库单为何消失在默认总览:继承旧时间导致查询窗 …

一个刚创建的出库单,在订单状态页面按单号搜索可以查到,但直接打开默认出库总览却看不到。接口、权限和仓库范围都没有报错,这种现象很像列表 SQL 漏查或缓存没有刷新。

排查首先对比了两条查询路径。按单号查询使用明确的唯一条件,默认总览还会附加最近时间窗口。数据库中的单据状态正常,但创建时间沿用了被复制旧单的日期,没有落在当天。

根因在复制语义

复制功能复用了原单对象和明细。业务字段需要继承,但审计和生命周期字段也被一起带了过来,包括单头与明细的创建时间、修改时间。

于是系统出现了一个矛盾的新单:

  • 单号和数据库记录是新生成的;
  • 状态也是新流程的初始状态;
  • 时间却属于历史单据;
  • 默认总览只展示最近 …