“云表支付”业务逻辑设计

来自企业管理软件文档中心
2021年6月21日 (一) 09:15Even讨论 | 贡献的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

*此功能需要在高于以下版本的服务器和客户端中使用:

  • 服务器:3.3.34.41
  • 客户端:3.1.33.12

一、业务场景

1.1 场景假设

我们以一个简单的场景进行说明:假设有一张订单需要支付,并且支付状态要显示在订单上。

1.2 分析问题

1、由订单生成支付单。

2、对支付单进行支付,并记录支付状态(支付失败、支付成功、支付中)。

3、针对未及时支付的订单,需要自动更新支付状态。


二、业务逻辑设计

2.1 基本信息说明

2.1.1系统模版“SYS_支付单”说明

开通“云表支付”服务后,系统会自动生成系统模版“SYS_支付单”(简称:支付单模版)。

支付单模版的作用是根据传入的订单信息和支付类型,生成支付单。

支付单模版提供3个全局的数据接口:

1、获取支付成功次数(订单类型,订单编号)

用于判断订单是否支付成功,返回“1”则已经支付成功,返回“0”则未支付成功。

2、查询支付单列表(订单类型,订单编号,支付状态)

用于查询某个订单的所有支付单,支付状态非必填项,填写支付状态,则只返回该状态的支付单数据。

3、获取支付单详情(支付单UUID)

用于查询指定支付单的数据。


2.1.2 支付类型说明

云表支付支持2种支付类型:H5支付 和 扫一扫支付

H5支付:

通过网页发起支付请求,可以请求打开第三方支付平台App进行支付,即在手机端操作时,会打开手机上的支付宝/微信进行支付。

扫一扫支付:

指生成支付单对应的支付二维码,付款方进行扫码支付,如是是微信支付的支付单,需要用微信扫码支付,如果是支付宝的支付单,则需要支付宝扫码支付。

2.2 订单生成支付单

2.2.1 逻辑说明

1、我们要用订单数据生成支付单,可以通过系统模版“SYS_支付单”生成。

2、生成订单前先进行判断,如果本订单已经支付成功或已经生成了支付单(待支付),则不需要生成支付单。

3、生成订单同时对本表单进行回写。

2.2.2 数据项说明

生成支付单必须有下表中前5个数据项(均为必填项)的信息,后3个数据项为需要回写到订单的支付状态信息:

001数据项说明.png

2.2.3 填表公式说明

开发者可根据实际情况设计生成订单的动作,如工具栏按钮、单元格按钮等,文档中仅以工具栏按钮事件为例。

2.2.3.1 添加生成支付单的按钮

添加工具栏按钮“H5支付”

2.2.3.2 保存表单

添加“保存”公式,先保存一次订单,确保订单编号生成(自动编号保存后生成),不影响支付单生成。

2.2.3.3 生成支付单,并回写支付信息

添加“赋值”公式,新建“SYS_支付单”,并填充初始值,但是根据支付类型不同,需要填充的初始值有所不同。

【H5支付】

需要填充的数据项有6项:“订单编号”、“订单标题”、“订单类型”、“订单金额”、“支付类型”、“不打开支付页面”,如下图。

002H5支付赋值.png

【扫一扫支付】

需要填充的数据项有5项:“订单编号”、“订单标题”、“订单类型”、“订单金额”、“支付类型”,如下图。

003扫一扫支付赋值.png


其他公式设置则不需要区分支付类型。

返回结果选择“SYS_支付单的基本信息”,不需要过滤条件。

004返回结果.png

回写支付单信息“支付单号”、“支付状态”、“支付URL”,如下图所示,分别为数据源的支付单UUID、支付状态、跳转URL

005回写支付状态.png


2.2.3.4 再次保存表单

因为赋值操作是填表公式执行的,需要保存表单才会录入数据库,添加“保存”公式,保存支付单回写到订单的信息。

以上,我们就完成了生成支付单并回写支付状态的业务逻辑。

接下来,我们需要增加生成支付单前的判断。

2.2.3.5 判断订单是否已经支付成功

新增“提示框”公式,判断本表单的支付状态是否为支付成功,是则弹出提示框,提示“本订单已支付”,如下图。

006判断是否支付成功.png


2.2.3.6 判断订单是否存在“支付中”的支付单

同样新增“提示框”公式,当本表单支付状态不等于“支付成功”的时候才执行。

我们需要知道本订单对应的支付单状态,所以需要调用“支付单模版”提供的接口“查询支付单列表”,查询“支付中”的支付单,如果返回值不为空,即本订单存在支付中的支付单。

注意事项:此处不要写提示框的执行条件,如果返回值为空,系统默认不满足执行条件,不弹出提示框。

公式设计如下图:

007判断是否存在支付单.png


2.3 自动更新支付单状态

2.3.1 逻辑说明

1、当本订单对应的支付单状态为“支付中”,需要自动更新支付单状态,直到支付单“支付成功”或者“支付关闭”。

对于自动循环的动作,可以使用定时器实现。

2、什么时候需要启动定时器来更新支付单状态?

生成支付单的赋值动作只执行1次,需要启动定时器更新支付状态;

支付单没有及时支付,订单页面被关闭,填表公式不会继续执行,所有再次打开表单的时候需要更新;

3、定时器属于填表公式,不打开表单就不执行,有没有不打开表单也能更新状态的办法?

使用计划任务进行状态更新。

2.3.2 填表公式说明

2.3.2.1 创建定时器“更新支付状态”

支付单不一定会被立即支付,且第三方平台不主动推送支付状态,所以需要开发者主动请求更新支付状态。系统需要持续请求更新支付状态,所以我们需要用“定时器”自动循环执行这个操作。

1、添加定时器

在填表公式中,找到“定时器”,添加一个定时器,可以命名为“定时器_更新支付状态”,时间间隔自行设置频率,取消“表单打开后自动运行”的选项

008添加定时器.png


2、更新支付状态

支付单有3种状态——“支付成功”“支付中”“支付关闭”,我们需要逐个状态进行判断。

2-1 支付成功

系统模版SYS_支付单提供的数据接口,可以查询订单是否完成支付。

添加“赋值”公式,选择系统模版“SYS_支付单”的“查询支付单列表”接口,接口参数为订单编号、订单类型和支付状态,其中支付状态的参数值为“支付成功”,如下图。

然后对本表单的“支付状态”、“支付单号”、“支付完成时间”进行赋值。

009定时器支付成功.png


2-2 支付中

添加“赋值”公式,选择系统模版“SYS_支付单”的“查询支付单列表”接口,接口参数为订单编号、订单类型和支付状态,其中支付状态的参数值为“支付中”,如下图。

010定时器支付中.png

当本表单的支付状态不等于“支付成功”时执行,对本表单的“支付状态”、“支付单号”、“支付完成时间”进行赋值。

2-3 支付关闭

和“支付中”的公式基本相同,只是执行条件和接口参数值不一样,详见下图。

011定时器支付关闭.png


3、保存表单

更新状态信息后,再次保存表单。

4、停止定时器

定时器是为了更新支付状态,当支付单状态不等于支付中时,定时器停止。

添加公式“设置控件属性”,添加定时器控件,选择“定时器_更新支付状态”;

执行条件 本表单.支付状态<>"支付中" ,

012停止定时器.png

这样,更新支付状态的定时器就设计好了。

接下来,添加启动定时器的公式。


2.3.2.2 启用定时器

1、生成支付单后启动定时器

在“H5支付”按钮的公式下方添加“设置控件属性”公式,命名为“运行定时器”

添加定时器控件“定时器_更新支付状态”,运行的值改为“常量.是”

013赋值启动定时器.png

2、修改打开表单后时启动定时器

在“修改打开表单后”事件中,直接引用公式“运行定时器”即可

014打开表单启动定时器.png

补充说明一下,为什么这里没有执行条件?

因为支付单回写状态到订单是填表公式执行的动作,为了避免表单异常导致回写失败,所以不管表单状态是什么,都启动定时器,如果满足定时器停止的条件,定时器会自动停止,不会占用系统性能。


2.4 用计划任务自动更新

计划任务本身不能设置业务公式,所以需要一个中间模版来设置业务公式。

2.4.1 中间模版的业务公式

可以参考定时器查询订单支付状态的逻辑,通过调用SYS_支付单的“查询支付单列表”接口进行查询,需要3个参数“订单类型”“订单编号”和“支付状态”,其中订单类型和订单编号需要订单模版提供,所以先要增加一个“查询订单信息”接口,然后再设计中间模版。

2.4.1.1 查询订单信息接口

在订单模版中添加数据接口,数据源为本模版,数据列选择“订单类型”“订单编号”,过滤条件设置为支付状态=“支付中”

015查询订单信息接口1.png
016查询订单信息接口2.png

2.4.1.2 中间模版的业务公式

中间模版命名为“计划任务_更新支付状态”,这个模版只执行业务公式,所以不需要设置数据项或者表单样式。

——业务公式【计划任务更新状态】

添加业务公式“计划任务更新状态”,选择目标模版为订单模版,在“新建时”标签页下设计逻辑。

case1针对支付关闭的情况,添加“同级数据源”选择订单模版的接口“查询订单信息”,勾选“多记录”,然后添加“子数据源”,选择SYS_支付单的“查询支付单列表”,设置参数。

对目标模版进行更新表单操作,匹配条件用“查询订单信息”的返回值和目标模版进行匹配,然后赋值,具体设计如下图所示。

注意:当订单支付状态为“支付成功”时,不需要再判断其他情况,所以左下角要勾选“执行后不再执行后续case”

017中间模版case1.png

case2和case1的设置基本相同,只是在子数据源传参数时,支付状态的值为“支付关闭”,如下图。

018中间模版case2.png


——业务公式【删除表单】

中间模版是保存后执行业务公式,即计划任务每执行一次,就会生成1张表单,这些表单没有实际意义,可以增加一个删除表单的业务公式。 匹配条件“1=1”,“1=1”恒为真,所以该模版的所有表单都会被删除。

019删除中间表单.png

2.4.2 设置计划任务

新建计划任务“更新支付状态”,选择模版“计划任务_更新支付状态”,设置开始时间、重复间隔和持续时间,选择“启用”后点击确定即可。

020设置计划任务.png


三、相关文档

点击阅读 —— 云表支付功能开通流程