订单中心中的 PayItem 与发票中心息息相关。
因为很多商品是不支持开发票的。
现实中发票如何开出来。
去超市买东西,会有小票,小票具有以下内容:
- 实际支付
- 优惠
- 可以开票的钱
- 开票主体
小票可以开,也可以不开,也可以批量开。
小票开票主体可能有多个,衣服能开 A 公司,还是能开 B 公司,由路由策略决定。
下订单会生成订单项,订单项包含税务分类编码。
订单系统上要包含这些东西,是因为我们之后的发票要考虑到。一个系统的设计要把下游考虑到。
为什么用户要存一个账号/交易主体,这块涉及到一个分账问题。
发票最终要生成一个购方信息,购方信息就是自己填写的个人信息。
开票日期和税务编码属于发票对象。
发票系统从宏观上来讲,就是拿了一张小票,订单完成后会生成一张小票。
在订单上购买一件东西会有三种支付方式:
- 优惠券
- 积分
- 银行卡
- 微信
批量开这个 Case 就是发票系统中最难的一个 Case 了。
批量需要考虑:
- 限额
- 拆票
凭据自身有个行为叫开票,批量开还是一张一张的开,不过有路由规则(开到哪个公司名下),限额规则(每个公司有不同的限额)。
A 公司最多只能开 1000 元,可能会拆分出来再开一张票。
发票预览实际上和开票一样的,只不过没有走金税系统了。
开票动作要生成一个开票对象。
业务不同点主要集中在搜索这一块。
个人开了多少票,管联订单的维度不同,搜索条件也不同。
订单完成后就可以发一个 MQ 消息,发票系统监听把凭据绑定上。
回到领域对象里面。

