昨天在 https://zhuanlan.zhihu.com/p/569483206 里,写了一下通过企业微信的对外收款完成个人收款自动化的方案,本来是想将该方案完全实现后再来写一篇带示例的文章展示一下的。但是,由于时间有限,要等示例完全做好估计要到明年了……

image.png

于是,我干脆零星地把每一个进展记录下来,算是一个开发日志吧。

今天做的不多,仅仅是增加了一个文件,提交记录见:https://github.com/Jeff-Tian/uni-orders/commit/ff38bb4e7f85c43330125b478b4dab4d2f1af1fb

复活老项目

uni-orders 是一个陈年老项目,部署在 Okteto 上: https://uni-orders-jeff-tian.cloud.okteto.net/api/static/index.html。这个项目提供了 API,可以创建订单。目前也只有一个数据表,即 orders。
image.png

以上是一个查询单号为 10 的订单详情的请求响应。

支付情况查询

现在,可以给它增加一个能力了,即在查询订单详情时,如果 paid_at 为空,那么按照昨天的设计,就去支付服务里查询一下从该订单生成的时间到10分钟后这个区间的支付列表,用金额做为关联,看是否已经支付了,并将结果更新回 order 表。

已支付

设置 paid_at 的时间,并设置订单状态为“已支付”。同时,在新的支付信息表里,记录支付详情。同时更新订单的支付查询标记字段,表示已经查询结束,不需要再次查询。

超时未支付

设置订单状态为“超时未支付”,同时更新订单的支付查询标记字段,表示已经查询结束,不需要再次查询。

未支付未超时

设置订单状态为“等待支付”状态,同时不需要更新“支付查询标记”字段,表示后续查询订单状态时,仍然需要从“支付服务”处查询支付状态。

支付信息表

以上支付情况查询,对于已支付的,需要将支付详情写入新表,这就是本次改动新增的文件所做的。对订单表新增字段的需求,下次再做了。
image.png

以上截图是支付详情,根据其数据结构(企业微信返回的),设计了 payment 表,但是对于 commodity_list、refund_list、payer_info 暂时跳过,因为不太清楚具体结构,而且看上去基本都是空。

所以,最后的表结构如下:
image.png

快速从项目代码中生成模型图

https://zhuanlan.zhihu.com/p/389745846 这篇文章里,介绍了我参与开发的一个工具,tplant,可以直接从代码生成模型图。以上的表结构图就是用它生成的。具体使用方案在那篇文章里有文字详述,以及 GIF 动图指引。

这里贴一下在 uni-orders 项目中的使用记录截图:
image.png

本来,是期待用 *.ts 生成所有模型的,但结果只有 order 的模型。原因可能是今天只新增了一个文件,它们两者间没有关系,导致生成的图里不包含 payment。
image.png

待做事项

  1. tplant 还可以再改进一下,即使模型间没有关系,也可以铺在最终的模型图里嘛;
  2. 项目中的 order 和 payment 要建立联系;
  3. 项目中的 order 有字段名写错了,要改正。