-
规则算子
规则算子目前有5种:
FIXED(固定档位,不关心传入的金额是多少,比如充值了100块,fixed设定了200积分,那么只送200积分);
FIXED_OVER(固定赠送档位,不关心传入的金额是多少,比如充值了100块,fixed_overlay设定了20积分,那么只送20积分);
MANUAL(人工调整,不关心金额,只关心本次调整的虚拟资产)
EXCHANGE(为金钱的比例,与传入的值有关)
MULTIPLE(倍率,与余额相关,是有子节点的计算产生的)
-
数据结构
说明:采用json格式,递归查找,深度优先计算
MANUAL在最上层节点,MANUAL没有子节点,不参与父节点计算
EXCHANGE没有子节点,因为只和传入的金额相关,可以参与父节点计算
FIXED没有子节点,自身要么是最上层节点,自身要么是最深度节点,可以参与父节点计算
MULTIPLE必须拥子节点,自身不能成为最深度节点,可以参与父节点计算,但是该节点只膨胀子节点增值的部分,子节点送了100积分,比如该节点膨胀1倍,那么只计算增值的部分100积分
<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1.可以同一层级的有MANUAL,EXCHANGE,FIXED,样例:新华充值200块,固定200虚拟币,赠送2块,按照比率计算2000.2=40,人工调整500,总共200+2+40+500=742
{
"ruleNodes":[{
"ruleName":"新华充值",
"ruleDes":"新华苹果充值赠送",
"ruleType":"FIXED_OVERLAY",
"ruleDefin":"2",
"duration":"P1Y"
},
{
"ruleName":"新华充值",
"ruleDes":"新华苹果基础充值",
"ruleType":"FIXED",
"ruleDefin":"200",
"duration":"P1Y"
},
{
"ruleName":"新华充值",
"ruleDes":"金钱比率兑换",
"ruleType":"EXCHANGE",
"ruleDefin":"2000",//单位:万分之
"duration":"P1Y"
},
{
"ruleName":"新华充值",
"ruleDes":"人工调整",
"ruleType":"MANUAL",
"ruleDefin":"500
"duration":"P1Y"
}
]
}
2.MULTIPLE必须有子节点,子节点计算的余额才可以翻倍,例如新华充值200块虚拟币,最深层节点:固定兑换200,比率计算2000.2=40,人工调整不参与任何节点的计算人工调整50,父节点的计算(200+40)*0.1=24,
总金额就是50+24+40+200=314
{
"ruleNodes":[
{
"ruleName":"新华充值",
"ruleDes":"新华苹果充值赠送",
"ruleType":"MULTIPLE",
"ruleDefin":"1000", //单位万分之
"duration":"P1Y",
"ruleNodes":[
{
"ruleName":"新华充值",
"ruleDes":"新华苹果基础充值",
"ruleType":"FIXED",
"ruleDefin":"200",
"duration":"P1Y"
},
{
"ruleName":"新华充值",
"ruleDes":"金钱比率兑换",
"ruleType":"EXCHANGE",
"ruleDefin":"2000",//单位:万分之
"duration":"P1Y"
}]
},
{
"ruleName":"新华充值",
"ruleDes":"人工调整",
"ruleType":"MANUAL",
"ruleDefin":"50",
"duration":"P1Y"
}]}</pre>
-
流程
-
sequece diagram
规则节点json参数
<colgroup><col width="250" span="1"><col width="250" span="1"><col width="250" span="1"></colgroup>
|
参数名称
|
描述
|
类型
|
|
ruleName
|
规则算子名称
|
string
|
|
ruleDes
|
规则描述
|
string
|
|
ruleType
|
规则算子类型
|
string
|
|
ruleDefin
|
规则算子计算参数
|
number
|
|
ruleNode
|
子节点
|
object
|
6. 运行期参数calucateContext
<colgroup><col width="250" span="1"><col width="250" span="1"><col width="250" span="1"></colgroup>
|
参数名称
|
描述
|
类型
|
|
currentNodeCalFee
|
当前节点计算资产金额
|
Number
|
|
childNodeSumFee
|
子节点传输过来参与当前节点计算的金额
|
Number
|
|
nodeLevel
|
当前节点层级
|
Number
|
|
calculater
|
算子
|
对象
|
|
outputContent
|
需要输出生成明细的参数
|
对象
|
|
parentCalucateContext
|
父节点的运行期参数,通过递归获取,根节点没有父节点的运行期参数
|
对象
|
|
inputContent
|
入参
|
对象
|
7. 计算原则
从高层级到低层级获取计算因子;
计算时深度优先,根据层级(nodeLevel)将运行期参数分组,最先计算的是深度最大的node,calucateContext记录了父节点的运行期参数,以原子的方式累加childNodeSumFee
8.规则样本
{"ruleNodes":[
{
"ruleName":"新华充值",
"ruleDes":"新华苹果充值赠送",
"ruleType":"FIXED_OVERLAY",
"ruleDefin":"200",
"duration":"P1Y"
},
{
"ruleName":"新华充值",
"ruleDes":"新华苹果基础充值",
"ruleType":"FIXED",
"ruleDefin":"20000",
"duration":"P1Y"
},
{
"ruleName":"新华充值",
"ruleDes":"金钱比率兑换",
"ruleType":"EXCHANGE",
"ruleDefin":"2000",
"duration":"P1Y"
},
{
"ruleName":"新华充值",
"ruleDes":"人工调整",
"ruleType":"MANUAL",
"ruleDefin":"500",
"duration":"P1Y"
}
]}