企业 在线同步

Odoo 企业版在线银行同步为什么不是“定时拉流水”而已:journal link、transaction dedup 与 reminder cron

account_online_synchronization 真正处理的是银行连接生命周期:怎样把线上账户指派到正确 journal,怎样过滤重复交易,拉取失败或授权将过期时又怎样通过

企业 框架
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 6 阅读

线上银行同步最怕的不是慢,而是重复拉、错 journal、授权过期没人知道,最后银行面板看着热闹,账却越来越难对。

这篇文章主要参考了以下企业版源码与测试入口:

  • enterprise/account_online_synchronization/models/account_online.py
  • enterprise/account_online_synchronization/models/account_journal.py
  • enterprise/account_online_synchronization/tests/test_account_online_account.py

一、这个模块真正解决的不是表面动作,而是跨模块语义对齐

account_online_synchronization 真正处理的是银行连接生命周期:怎样把线上账户指派到正确 journal,怎样过滤重复交易,拉取失败或授权将过期时又怎样通过 cron 和提醒邮件把同步链维持住。

如果只看 UI,很容易把它理解成一个按钮、一张表或一个新视图。但从 account_online_synchronization 的模型、测试和桥接关系看,官方真正关心的是:前台动作发生以后,后端主链路能不能继续保持同一套业务语义

二、核心机制链路

1. online account 与 journal 是双向约束

account_online._assign_journal()、journal._check_account_online_account_id() 说明线上账户不能随便挂到任何账簿,journal 绑定本身就是受校验的关系。

2. 交易导入先做 provider 级去重

_get_filtered_transactions() 与相关测试覆盖 transaction_identifier、end_to_end_uuid、多次抓取等场景,说明系统优先防止同一交易被重复生成为 statement line。

3. 同步链依赖 cron 和提醒治理

_cron_fetch_online_transactions()、_cron_fetch_waiting_online_transactions()、_cron_send_reminder_email() 表明在线同步不是一次性按钮,而是一套持续维护连接状态的后台节奏。

三、最容易被误解的边界

  • 把 online sync 当成一个 import wizard,不关心账户与 journal 的绑定正确性。
  • 忽略 transaction identifier / end_to_end_uuid 去重,结果重复流水反复入账。
  • 只在出错时手工刷新,不关注 reminder cron,授权过期后长时间无人处理。

这些误解之所以常见,往往是因为大家只看见“入口动作”,却没有继续追到模型方法、状态切换、聚合口径和测试场景里去看 Odoo 究竟把什么当成事实、把什么当成辅助信息。

四、实施与排查时,建议按这个顺序看

  • 先查 online account 与 journal 的绑定校验是否通过。
  • 再核对过滤重复交易前后的 transaction 列表。
  • 最后查看 cron 抓取、manual_sync 与提醒邮件是否按预期运行。

对企业版功能来说,排查顺序非常重要。很多看似是“结果不对”的问题,真正根因往往更早:字段上下文没带过去、桥接对象没建、状态机没推进、或者权限/公司边界一开始就错了。

五、结论

在线银行同步真正难的地方,是把“外部不稳定的银行连接”收束成 Odoo 里一条稳定、可去重、可提醒的银行流水供给链。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。