分帐.md 5.7 KB

背景说明
  • 平台作为服务商,为技师提供订单服务,技师为服务提供者,用户为服务接受者。业务员主要负责推广渠道,渠道用于推广用户,也可以推荐技师加入平台。
  • 店铺是一个综合服务门店:
    • 店铺入驻平台,需支付入驻费
    • 店铺可以推荐用户下载 APP,获取推广费
    • 店铺可以推荐技师加入平台,获取推荐费
    • 店铺是一个线下服务场所,用户在平台下单后,可以选择到店服务或上门服务
  • 代理基于店铺,代理的业绩基于店铺的业绩,代理的业绩分成基于店铺营业额,代理的业绩提成基于店铺利润
  • 需要设计一个分帐方案,技师、业务员、渠道、店铺、代理和平台之间如何分帐,每种角色的分帐算法不同,分帐基于订单金额或剩余利润
  • 订单完成时,通过平台设置的角色分帐算法和比例,自动计算出每个角色应得的金额,并生成按角色分类的分帐数据表
  • 一个订单上,每个角色可能同时存在,也可能不存在,角色之间是相加关系,不是相乘关系
  • 分帐方案需要灵活,比例需要有配置的地方,方便后续调整
  • 分帐方案需要考虑订单取消、退款情况
分帐业务逻辑

####### 技师上门

技师通过平台接单,到用户指定地点提供服务

  1. 如果订单上的用户是某个渠道(技师、店铺、业务员等)推广来的,则渠道获得订单项目金额(不含优惠、路费)的百分之几,推广最大 2 级,第一级渠道获得 20%,第二级渠道获得 10%
  2. 如果订单上的技师是由推荐渠道(店铺、业务员等)推荐的,则推荐渠道获得订单项目金额(不含优惠、路费)的 1%。如果推荐渠道为技师,则渠道获得订单金额(不含优惠、路费)的 3%,上限为 1000 元封顶
  3. 接单技师作为服务提供者,获得订单项目金额(不含优惠)的 50%至 55%,路费另算,技师获得 90%,平台 10%

####### 用户到店

用户通过平台下单,选择店铺中的技师,或直接选择店铺服务项目,到店消费

  1. 用户到店核销完成,店铺获得 80%,店铺线下与技师分帐
  2. 如果用户是某个渠道(技师、店铺、业务员等)推广来的,则渠道获得与店铺分帐后的 20%中的 10%

####### 平台技师到店

救急订单,调技师去店铺,用户到店消费,店铺替到店客户下单

如果店铺技师不足,则店铺在平台正常下单,且技师为平台技师(非店铺自有技师),店铺创建的订单可设置报销路费或不报销路费,技师到店核销后,平台从店铺余额中扣除此订单服务费价格的 10%

程序设计
  1. 创建分帐配置表,存储各角色的分帐比例和算法
  2. 创建分帐数据表,存储每个订单的分帐结果
  3. 在订单完成时,调用分帐逻辑,计算各角色应得金额,并写入分帐数据表
  4. 考虑订单取消和退款情况,调整分帐数据
分帐配置表
字段名 类型 说明
id int 主键
role string 角色
percentage decimal 分帐比例
algorithm string 分帐算法
created_at datetime 创建时间
updated_at datetime 更新时间
分帐数据表
字段名 类型 说明
id int 主键
order_id int 订单 ID
role string 角色
amount decimal 分帐金额
created_at datetime 创建时间
updated_at datetime 更新时间
分账算法设计
技师上门分帐算法
  1. 获取订单项目金额(不含优惠、路费)
  2. 计算渠道推广分成:
    • 第一级渠道:订单项目金额 * 20%
    • 第二级渠道:订单项目金额 * 10%
  3. 计算推荐渠道分成:
    • 推荐渠道:订单项目金额 * 1%
    • 如果推荐渠道为技师:订单项目金额 * 3%,上限 1000 元
  4. 计算技师分成:
    • 技师:订单项目金额 * 50%至 55%
    • 路费:技师获得 90%,平台 10%
用户到店分帐算法
  1. 获取订单项目金额(不含优惠、路费)
  2. 计算店铺分成:
    • 店铺:订单项目金额 * 80%
  3. 计算渠道推广分成:
    • 渠道:店铺分成后的 20%中的 10%
平台技师到店分帐算法
  1. 获取订单项目金额(不含优惠、路费)
  2. 救急订单计算分成:
    • 平台:订单项目金额 * 10%
分帐逻辑
  1. 获取订单信息,判断订单状态是否为完成
  2. 根据订单信息,获取相关角色(技师、店铺、渠道等)
  3. 根据分帐配置表,计算各角色应得金额
  4. 将计算结果写入分帐数据表
  5. 如果订单取消或退款,调整分帐数据
分账数据库概念设计
分帐
  • 字段:分账编号,订单编号,分润类型(用户一级邀请人、用户二级邀请人、技师、平台、代理、技师邀请人),分润账户类型(用户、技师、平台、代理),分润账户编号,参与分润金额,分润金额,分润比例,分润时间,创建时间,更新时间

CREATE TABLE 分帐 ( 分账编号 INT PRIMARY KEY AUTO_INCREMENT, 订单编号 INT NOT NULL, 分润类型 VARCHAR(50) NOT NULL, 分润账户类型 VARCHAR(20) NOT NULL, 分润账户编号 INT NOT NULL, 参与分润金额 DECIMAL(10, 2) NOT NULL, 分润金额 DECIMAL(10, 2) NOT NULL, 分润比例 DECIMAL(5, 2) NOT NULL, 分润时间 DATETIME NOT NULL, 创建时间 DATETIME DEFAULT CURRENT_TIMESTAMP, 更新时间 DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );