15平台订单收入.sql 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. -- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
  2. /*
  3. 区域是order表中的area_code字段,订单编号是order表在的id字段,
  4. 技师名称是通过order表中coach_id去关联coach_users表然后获取coach_users表中的user_id字段再去关联member_users表对比member_users表id获取nickname字段做为技师名称,
  5. 店铺名称是order表通过shop_id关联shop_auth_records表对比shop_id是否相同,相同则获取shop_name做为店铺名称,不相同则空着即可,
  6. 用户名称是order表通过user_id关联member_users表对比member_users表id然后获取nickname字段做为用户名称,
  7. 订单金额是order表中的total_amount字段,
  8. 代理商是order表通过agent_id关联agent_infos表对比agent_infos表的id然后获取user_id字段去关联member_users表对比member_users表id获取nickname字段做为代理商,
  9. 接单时间是order表通过id去关联order_records表通过判断state字段的状态为已结单状态获取对应的created_at字段做为接单时间,
  10. 下单时间是order表中的created_at字段,,路费是order表中的traffic_amount字段,
  11. 技师分成、店铺分成、路费、渠道分成、业务员分成、代理商分成、市场经费、平台分成都是通过order表的id去关联wallet_split_records表通过split_type分账类型为师分成、店铺分成、路费、渠道分成、业务员分成、代理商分成、市场经费、平台分成分别对应获取split_amount字段
  12. wallet_split_records表split_type分账类型是:技师分成 业务员分成 代理商分成 市场经费 平台分成 渠道分成 店铺分成
  13. */
  14. DROP TABLE IF EXISTS report_platform_order_income;
  15. CREATE TABLE report_platform_order_income AS
  16. /* 使用WITH子句定义多个查询因子 */
  17. /* 创建平台订单视图 */
  18. DROP VIEW IF EXISTS view_platform_order_income;
  19. CREATE OR REPLACE VIEW view_platform_order_income AS
  20. SELECT
  21. base.area_code as area_code /* 区域 */,
  22. base.id as order_id /* 订单编号 */,
  23. tech_info.coach_name as coach_name /* 技师名称 */,
  24. shop_info.shop_name as shop_name /* 店铺名称 */,
  25. muser.nickname as user_name /* 用户名称 */,
  26. base.total_amount as total_amount /* 订单金额 */,
  27. agent_info.agent_name as agent_name /* 代理商 */,
  28. accept_time.accept_time as accept_time /* 接单时间 */,
  29. base.created_at as created_at /* 下单时间 */,
  30. split_info.coach_amount as coach_amount /* 技师分成 */,
  31. split_info.shop_amount as shop_amount /* 店铺分成 */,
  32. base.traffic_amount as traffic_amount /* 路费 */,
  33. split_info.channel_amount as channel_amount /* 渠道分成 */,
  34. split_info.salesman_amount as salesman_amount /* 业务员分成 */,
  35. split_info.agent_amount as agent_amount /* 代理商分成 */,
  36. split_info.market_amount as market_amount /* 市场经费 */,
  37. split_info.platform_amount as platform_amount /* 平台分成 */
  38. FROM (
  39. SELECT ord.id /* 订单编号 */, ord.area_code /* 区域 */, ord.coach_id /* 技师ID */, ord.shop_id /* 店铺ID */, ord.user_id /* 用户ID */, ord.agent_id /* 代理商ID */, ord.total_amount /* 订单金额 */, ord.traffic_amount /* 路费 */, ord.created_at /* 下单时间 */
  40. FROM `order` ord /* 订单表 */
  41. WHERE
  42. ord.deleted_at IS NULL /* 未删除的订单 */
  43. ) base
  44. LEFT JOIN (
  45. SELECT cu.id /* 技师ID */, mu.nickname coach_name /* 技师名称 */
  46. FROM
  47. coach_users cu /* 技师表 */
  48. LEFT JOIN member_users mu ON cu.user_id = mu.id /* 用户表 */
  49. ) tech_info ON base.coach_id = tech_info.id /* 关联技师信息 */
  50. LEFT JOIN (
  51. SELECT sar.shop_id /* 店铺ID */, sar.shop_name /* 店铺名称 */
  52. FROM shop_auth_records sar /* 店铺认证记录表 */
  53. ) shop_info ON base.shop_id = shop_info.shop_id /* 关联店铺信息 */
  54. LEFT JOIN member_users muser ON base.user_id = muser.id /* 关联用户信息 */
  55. LEFT JOIN (
  56. SELECT ai.id /* 代理商ID */, mu.nickname agent_name /* 代理商名称 */
  57. FROM
  58. agent_infos ai /* 代理商表 */
  59. LEFT JOIN member_users mu ON ai.user_id = mu.id /* 用户表 */
  60. ) agent_info ON base.agent_id = agent_info.id /* 关联代理商信息 */
  61. LEFT JOIN (
  62. SELECT orec.order_id /* 订单ID */, orec.created_at accept_time /* 接单时间 */
  63. FROM order_records orec /* 订单记录表 */
  64. WHERE
  65. orec.state = 13 /* 已完成状态 */
  66. ) accept_time ON base.id = accept_time.order_id /* 关联接单时间 */
  67. LEFT JOIN (
  68. SELECT
  69. ws.order_id /* 订单ID */,
  70. MAX(
  71. CASE
  72. WHEN ws.split_type = 'COACH' THEN ws.split_amount
  73. ELSE 0
  74. END
  75. ) coach_amount /* 技师分成 */,
  76. MAX(
  77. CASE
  78. WHEN ws.split_type = 'SHOP' THEN ws.split_amount
  79. ELSE 0
  80. END
  81. ) shop_amount /* 店铺分成 */,
  82. MAX(
  83. CASE
  84. WHEN ws.split_type = 'CHANNEL' THEN ws.split_amount
  85. ELSE 0
  86. END
  87. ) channel_amount /* 渠道分成 */,
  88. MAX(
  89. CASE
  90. WHEN ws.split_type = 'SALESMAN' THEN ws.split_amount
  91. ELSE 0
  92. END
  93. ) salesman_amount /* 业务员分成 */,
  94. MAX(
  95. CASE
  96. WHEN ws.split_type = 'AGENT' THEN ws.split_amount
  97. ELSE 0
  98. END
  99. ) agent_amount /* 代理商分成 */,
  100. MAX(
  101. CASE
  102. WHEN ws.split_type = 'MARKET' THEN ws.split_amount
  103. ELSE 0
  104. END
  105. ) market_amount /* 市场经费 */,
  106. MAX(
  107. CASE
  108. WHEN ws.split_type = 'PLATFORM' THEN ws.split_amount
  109. ELSE 0
  110. END
  111. ) platform_amount /* 平台分成 */
  112. FROM wallet_split_records ws /* 钱包分账记录表 */
  113. GROUP BY
  114. ws.order_id
  115. ) split_info ON base.id = split_info.order_id /* 关联分账信息 */
  116. ORDER BY base.created_at DESC /* 按下单时间倒序 */;
  117. select * from view_platform_order_income;