订单创建模块的领域模型设计

关于创建订单功能的文档

创建订单需要完成哪些功能?

  • 通过app_id,user_id,orderData(json)创建订单
  • 限量的判断与创建,并限量,主要是针对imsi,imei,phone
  • 过滤限量白名单用户,检查限量的用户
  • 限额的检查,支付等级的更新,黑名单,L0,L1,L2(10分钟,日,月)
  • 生成订单号,并考虑对DPAY,KYSTORE,UPMPPAY的特殊处理(订单号:签名)

创建订单规则

a.限量配置:{M0:{imei:{日更换,月更换,绑定超量},imsi:{日更换,月更换,绑定超量},phone:{日更换,月更换,绑定超量}},M1:{imei:{日更换,月更换,绑定超量},imsi:{日更换,月更换,绑定超量},phone:{日更换,月更换,绑定超量}},M2:{imei:{日更换,月更换,绑定超量},imsi:{日更换,月更换,绑定超量},phone:{日更换,月更换,绑定超量}}}

b.等级-限额配置:关于游戏账号限额 L0/L1/L2/L3/L4 = {十分钟限额、日限额、月限额};关于imsi号限额, L0/L1/L2/L3/L4 = {十分钟限额、日限额、月限额};关于手机号限额, L0/L1/L2/L3/L4 = {十分钟限额、日限额、月限额}

c.订单号长度配置:{支付渠道:订单号长度}

创建订单的领域模型(实体,值对象,服务,仓库)

1. 订单 (实体/值对象)

2. 订单的服务

3. 订单的规则引擎

4. 各个实体/值对象的Repository(在演化中与Infrastructure交互行为)

创建订单的对象演化

1. 订单 (订单信息用于存储订单的基本信息)

  • 实体(orderid, appid, userid, channel_id, providerid, status, finished, phonenum, created_at, updated_at)和值对象(orderid,app_id_stat,orderData,orderResult,client_callback,request_data,response_data,created_at,updated_at)

  • 行为:存储订单信息;获得订单号,订单游戏id,玩家账号,订单状态(需要考虑状态值),client_callbackdata信息,创建时间,更新时间等基本信息;更新订单状态;更新更新时间;更新client_callbackdata信息;此订单是否已处理

  • 属性:appid,userid,orderdata,channelid,providerid,订单状态(status),client_callbackdata,创建时间,更新时间,phnoenum,finished

2. 订单的服务(提供创建订单服务的处理)

  • 行为:对象之间的逻辑处理;提供了外部thrift的接口和创建订单领域内的调度及封装;如:创建订单等thrift相关;获得规则引擎;创建订单;

3. 订单的规则引擎(备注:规则引擎负责管理下属的所有规则,最终只是返回一个check的结果给订单服务,通知服务是否可以创建订单)

  • 行为:获得配置规则;检查是否可以生成订单号

4. 支付渠道基类(具有各种支付渠道的子类)//主要功能:按照支付渠道规则获取订单长度;按照支付渠道规则选取订单生成算法;按照支付渠道生成签名(调用签名对象里面的方法来实现)

  • 行为:获得签名对象;生成订单算法(子类可以覆盖它);根据渠道名称检查是否需要签名
  • 属性:支付渠道,订单号,订单号长度(数据库中不需要存储)

5. 签名基类(具有各种具体类型签名的子类)

  • 行为:生成签名算法(具体在各子类中);创建签名对象;
  • 属性:渠道,签名

6. 支付消费额(根据订单信息管理用户,imsi,phone的近期消费额)(备注:当数据规模达到一定数量级时,采用分表的策略)

  • 行为:按规则初始化对象;更改更新时间;返回用户日、月、10分钟消费额、总消费额;获取此用户的支付额度(前七天的每天支付额和总额,此行为与等级相关);更新Json对象(7天内各天的消费额、总消费额、月消费额);备注:10分钟模块设置为可开关方式,分表读取
  • 属性:appid,创建时间,更新时间,消费类型(游戏账号,imsi,phone),该消费类型的值(游戏账号,imsi值,phone值),{sp总消费额:sp金额, sp月消费额:sp金额, 第一天:sp金额, 第二天:sp金额, 第三天:sp金额, 第四天:sp金额, 第五天:sp金额, 第六天:sp金额, 第七天:sp金额} ,日消费额(验证订单后的实时更新)

    7. 限额等级(根据该订单信息得到imsi等级、phone等级和账号等级;更新等级;只限于短信支付)L0/L1/L2/L3/L4

  • 行为:根据用户id获取所有等级(以最低等级为玩家的支付等级);更新phone,imsi和账号(sp)等级;按规则初始化对象,创建用户等级;等级是否被操作
  • 属性:appid, 消费类型(游戏账号,imsi,phone),该消费类型的值(游戏账号,imsi值,phone值),对应等级; 创建时间,更新时间;用户用过的所有SP(支付方式)(Json描述),等级操作状态(系统、运营、自动脚本),等级操作时间,等级操作变化(L2->L0)

8. 用户支付更换量(根据订单得到该用户现有的更换量)

  • 行为:返回用户imei日、月更换量;返回用户imsi日、月更换量;返回用户手机号日、月更换量;更新日Json和月Json;更新更新时间;创建用户更换量并按规则初始化;
  • 属性:appid,userid,{imei:{当日:{imei值a,imei值b,…,imei值c}}, imsi:{当日:{imsi值a,imsi值b,…,imsi值c}}, phone:{当日:{phone值a,phone值b,…,phone值c}}}(日Json),{imei:{当月:{imei值a,imei值b,…,imei值c}}, imsi:{当月:{imsi值a,imsi值b,…,imsi值c}}, phone:{当月:{phone值a,phone值b,…,phone值c}}}(月Json),创建时间,更新时间

    9. 绑定超量(imei\imsi\phone三者的用户id;三者和用户id之间是多对多的关系,但此处只考虑1对多,即计算1个imeinum\imsinum\phonenum对应多个用户id)备注:白名单不计入绑定量

  • 行为:返回相应类型(imei\imsi\phone)的绑定值(imeinum\imsinum\phonenum)的对应游戏的绑定量;创建绑定超量并按规则初始化;更新各类型绑定量
  • 属性:绑定类型(imei\imsi\phone),绑定值(imeinum\imsinum\phonenum),{zhajinhua : {用户id, 用户id}, laohuji : {用户id, 用户id}}(用户Json),创建时间,更新时间

    10. 限量的黑白名单

  • 行为:获得用户的限量黑白名单;修改/新增用户限量黑白名单;更新操作时间;
  • 属性:用户id,appid,用户限量标识(M0\M1\M2,M0:黑,M1:正常限制,M2:白),创建时间,更新时间,黑白名单的操作状态(系统、运营、自动脚本),操作时间,操作变化(M1->M0)

11. 限制的原因(用户的(日/月)更换量和绑定超量,限额等限制的集合),且等级与原因紧密关联

  • 行为:获得限制原因;设置限制原因;
  • 属性:用户id,限制原因{限量:reason, 限额:reason},创建时间,更新时间

12. 配置管理(根据订单信息读取本地的限制配置文件)

  • 行为:初始化并读取限量标准配置对象;返回配置文件的配置对象;热更新配置文件;获得配置对象
  • 属性:配置文件路径、配置类型、整个文件的配置对象;

你可能感兴趣的:(领域模型,实际业务)