账户规则计算模型

  1. 规则算子
    规则算子目前有5种:
    FIXED(固定档位,不关心传入的金额是多少,比如充值了100块,fixed设定了200积分,那么只送200积分);
    FIXED_OVER(固定赠送档位,不关心传入的金额是多少,比如充值了100块,fixed_overlay设定了20积分,那么只送20积分);
    MANUAL(人工调整,不关心金额,只关心本次调整的虚拟资产)
    EXCHANGE(为金钱的比例,与传入的值有关)
    MULTIPLE(倍率,与余额相关,是有子节点的计算产生的)
  2. 数据结构
    说明:采用json格式,递归查找,深度优先计算
    MANUAL在最上层节点,MANUAL没有子节点,不参与父节点计算
    EXCHANGE没有子节点,因为只和传入的金额相关,可以参与父节点计算
    FIXED没有子节点,自身要么是最上层节点,自身要么是最深度节点,可以参与父节点计算
    MULTIPLE必须拥子节点,自身不能成为最深度节点,可以参与父节点计算,但是该节点只膨胀子节点增值的部分,子节点送了100积分,比如该节点膨胀1倍,那么只计算增值的部分100积分
    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,比率计算200
    0.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"
    }]
    }




  3. 流程 账户规则计算模型
    文章图片
    image


  4. sequece diagram 账户规则计算模型
    文章图片
    image
  5. 规则节点json参数

|
参数名称
|
描述
|
类型
|
|
ruleName
|
规则算子名称
|
string
|
|
ruleDes
|
规则描述
|
string
|
|
ruleType
|
规则算子类型
|
string
|
|
ruleDefin
|
规则算子计算参数
|
number
|
|
ruleNode
|
子节点
|
object
|
6. 运行期参数calucateContext

|
参数名称
|
描述
|
类型
|
|
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"

}
]}

    推荐阅读