11店铺订单.sql 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. -- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
  2. /*
  3. 用户类型是order表中的order_source字段,用户昵称/店铺是通过order的order_source字段判断是用户通过平台下单是店铺在平台下应急订单,
  4. 用户昵称是order表通过user_id关联member_users表获取nickname字段为用户名称,
  5. 店铺名称是order表通过shop_id关联shop_auth_records并判断shop_id是否存在存在则获取shop_name字段为店铺名称不存在则空着即可,
  6. 订单类型是order表中的order_type字段,项目名称是order表的project_id关联shop_services表并判断是否存在project_id存在则获取name为项目名称不存在则空着即可,
  7. 订单金额是order表total_amount字段,到店时间是order表id关联order_records表并判断状态state为已到店状态时的created_at字段为到店时间,
  8. 订单状态是order表id关联order_records表最新的状态state,
  9. 店铺分成、推广分成、平台抽成都是order表id关联wallet_split_records通过该表中的split_type不同的分账类型去参与分成最后split_amount字段就是店铺分成、推广分成、平台抽成最终字段
  10. */
  11. /*
  12. 基础订单信息与分账记录统计查询
  13. */
  14. DROP TABLE IF EXISTS report_shop_order;
  15. CREATE TABLE report_shop_order AS
  16. /*
  17. 店铺订单视图
  18. */
  19. DROP VIEW IF EXISTS manage_shop_order;
  20. CREATE OR REPLACE VIEW manage_shop_order AS
  21. WITH
  22. order_arrival AS (
  23. /* 获取订单到店记录 */
  24. SELECT
  25. order_id,
  26. created_at AS arrival_time,
  27. state
  28. FROM order_records /* 关联到店记录 */
  29. WHERE
  30. state = 10 /* 已到店状态 */
  31. ),
  32. latest_order_status AS (
  33. /* 获取订单最新状态 */
  34. SELECT order_id, state AS latest_state
  35. FROM order_records /* 关联订单状态 */
  36. WHERE (order_id, created_at) IN (
  37. SELECT order_id, MAX(created_at)
  38. FROM order_records /* 关联订单状态 */
  39. GROUP BY
  40. order_id /* 按订单ID分组 */
  41. )
  42. ),
  43. split_amounts AS (
  44. /* 获取各类分账金额 */
  45. SELECT
  46. order_id,
  47. MAX(
  48. CASE
  49. WHEN split_type = 'SHOP' THEN split_amount
  50. ELSE 0
  51. END
  52. ) AS shop_amount /* 店铺分成 */,
  53. MAX(
  54. CASE
  55. WHEN split_type = 'PROMOTION' THEN split_amount
  56. ELSE 0
  57. END
  58. ) AS promotion_amount /* 推广分成 */,
  59. MAX(
  60. CASE
  61. WHEN split_type = 'PLATFORM' THEN split_amount
  62. ELSE 0
  63. END
  64. ) AS platform_amount /* 平台抽成 */
  65. FROM wallet_split_records /* 关联分账记录 */
  66. GROUP BY
  67. order_id /* 按订单ID分组 */
  68. )
  69. SELECT
  70. o.source as source /* 订单来源 */,
  71. CASE
  72. WHEN o.source = 1 THEN mu.nickname
  73. WHEN o.source = 2 THEN sar.shop_name
  74. ELSE NULL
  75. END as source_name /* 用户昵称/店铺名称 */,
  76. o.type as type /* 订单类型 */,
  77. ss.name as service_name /* 项目名称 */,
  78. o.total_amount as total_amount /* 订单金额 */,
  79. oa.arrival_time as arrival_time /* 到店时间 */,
  80. los.latest_state as latest_state /* 订单状态 */,
  81. COALESCE(sar.contact_phone, '') as shop_phone /* 店铺联系电话 */,
  82. COALESCE(mu.mobile, '') as coach_phone /* 技师联系方式 */,
  83. o.area_code as area_code /* 区域 */,
  84. o.address as address /* 位置 */,
  85. o.distance as distance /* 距离 */,
  86. COALESCE(sa.shop_amount, 0) as shop_amount /* 店铺分成 */,
  87. COALESCE(sa.promotion_amount, 0) as promotion_amount /* 推广分成 */,
  88. COALESCE(sa.platform_amount, 0) as platform_amount /* 平台抽成 */
  89. FROM
  90. `order` o
  91. LEFT JOIN member_users mu ON o.user_id = mu.id /* 关联用户信息 */
  92. LEFT JOIN shop_auth_records sar ON o.shop_id = sar.shop_id /* 关联店铺信息 */
  93. LEFT JOIN shop_services ss ON o.project_id = ss.id /* 关联服务项目 */
  94. LEFT JOIN order_arrival oa ON o.id = oa.order_id /* 关联到店记录 */
  95. LEFT JOIN latest_order_status los ON o.id = los.order_id /* 关联最新状态 */
  96. LEFT JOIN split_amounts sa ON o.id = sa.order_id /* 关联分账信息 */
  97. ORDER BY o.id DESC /* 按订单ID倒序排列 */;
  98. select * from manage_shop_order;