08订单管理.sql 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. -- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
  2. /*
  3. 订单编号是order表的id,项目名称是order表通过service_id与project表关联查询出项目名称title,
  4. 用户名称是order表通过user_id和member_users表关联查询出用户姓名nickname,
  5. 下单时间是order表的中的created_at,支付金额、支付方式是order表的id与 wallet_payment_records表的order_id关联查询出,
  6. 技师/店铺的意思是该订单有可能是技师接单也有可能是店铺接单是通过订单来源类型进行区分的,区域是order表的area_code,
  7. 地址是order表的address,备注是order表的remark,订单来源是order表的order_source,路费是order表的路程金额,
  8. 服务状态是order表通过id与order_records表关联查询state,技师/店铺接单时间以及到达时间、开始服务时间都是从order_records表中的created_at字段,
  9. 技师减免是order表通过coach_id和project_id与coach_project关联通过判断找出该discount_amount字段,
  10. 店铺优惠劵和平台优惠劵是order表中id与market_coupon_records表判断是否存在该订单编号存在然后通过优惠卷编号与market_coupons表关联获取优惠劵金额,
  11. 订单类型是order表order_type字段,上级订单是因为客户在原有订单基础上再次下单从而产生的关联原有订单,
  12. 上级订单项目是因为客户在原有订单基础上再次下单从而产生的关联原有订单项目名称,
  13. 用户确认撤离时间、技师确认离开时间都是从order_records表中的created_at字段。
  14. 补充逻辑:技师名称是根据order表的coach_is与coach_users关联查询出user_id再与用户表关联查询出技师名称
  15. 先不要了没设计: 营销类型 砍价减免金额 打赏金额 悬赏金额 跟单客服是系统表里的
  16. */
  17. /* 订单列表视图 */
  18. DROP VIEW IF EXISTS manage_order_list;
  19. CREATE OR REPLACE VIEW manage_order_list AS
  20. WITH
  21. order_status AS (
  22. SELECT
  23. order_id,
  24. state /* 状态 */,
  25. created_at /* 状态变更时间 */,
  26. ROW_NUMBER() OVER (
  27. PARTITION BY
  28. order_id,
  29. state
  30. ORDER BY created_at
  31. ) AS rn
  32. FROM order_records
  33. )
  34. SELECT
  35. o.id AS order_id /* 序号 */,
  36. o.order_no AS order_no /* 订单号 */,
  37. p.title AS project_title /* 项目名称 */,
  38. mu.nickname AS user_name /* 用户名称 */,
  39. o.created_at AS order_time /* 下单时间 */,
  40. o.total_amount AS total_amount /* 支付金额 */,
  41. os_state.state AS service_state /* 服务状态 */,
  42. os_accept.created_at AS accept_time /* 技师/店铺接单时间 */,
  43. o.area_code AS area_code /* 区域 */,
  44. o.address AS address /* 地址 */,
  45. o.remark AS remark /* 备注 */,
  46. o.source AS source /* 订单来源 */,
  47. os_arrive.created_at AS arrive_time /* 到达时间 */,
  48. TIMESTAMPDIFF(
  49. MINUTE,
  50. NOW(),
  51. os_arrive.created_at
  52. ) AS countdown /* 订单倒计时 */,
  53. os_start.created_at AS start_time /* 服务开始时间 */,
  54. mc_platform.discount_value AS platform_discount /* 平台优惠券 */,
  55. cp.discount_amount AS coach_discount /* 技师减免 */,
  56. mc_shop.discount_value AS shop_discount /* 商铺代金券 */,
  57. wpr.payment_method AS payment_method /* 支付方式 */,
  58. o.traffic_amount AS traffic_amount /* 路费 */,
  59. o.type AS type /* 订单类型 */,
  60. os_user_leave.created_at AS user_leave_time /* 用户确认撤离时间 */,
  61. os_coach_leave.created_at AS coach_leave_time /* 技师确认离开时间 */
  62. FROM
  63. `order` o
  64. LEFT JOIN project p ON o.project_id = p.id /* 关联项目表 */
  65. LEFT JOIN member_users mu ON o.user_id = mu.id /* 关联用户表 */
  66. /* 关联技师表和用户表获取技师名称 */
  67. LEFT JOIN coach_users cu ON o.coach_id = cu.id /* 关联技师表 */
  68. LEFT JOIN member_users coach_mu ON cu.user_id = coach_mu.id /* 关联用户表获取技师名称 */
  69. LEFT JOIN shop_auth_records sa ON o.shop_id = sa.shop_id /* 关联店铺认证表 */
  70. LEFT JOIN coach_project cp ON o.coach_id = cp.coach_id
  71. AND o.project_id = cp.project_id /* 关联技师项目表 */
  72. LEFT JOIN wallet_payment_records wpr ON o.id = wpr.order_id /* 关联支付记录表 */
  73. /* 关联优惠券记录和优惠券表-平台券 */
  74. LEFT JOIN market_coupon_records mcr_p ON o.id = mcr_p.order_id
  75. LEFT JOIN market_coupons mc_platform ON mcr_p.coupon_id = mc_platform.id
  76. /* 关联优惠券记录和优惠券表-店铺券 */
  77. LEFT JOIN market_coupon_records mcr_s ON o.id = mcr_s.order_id
  78. LEFT JOIN market_coupons mc_shop ON mcr_s.coupon_id = mc_shop.id
  79. /* 关联订单状态-当前状态 */
  80. LEFT JOIN order_status os_state ON o.id = os_state.order_id
  81. AND os_state.rn = 1
  82. /* 关联订单状态-接单时间 */
  83. LEFT JOIN order_status os_accept ON o.id = os_accept.order_id
  84. AND os_accept.state = 8
  85. AND os_accept.rn = 1
  86. /* 关联订单状态-到达时间 */
  87. LEFT JOIN order_status os_arrive ON o.id = os_arrive.order_id
  88. AND os_arrive.state = 10
  89. AND os_arrive.rn = 1
  90. /* 关联订单状态-开始服务时间 */
  91. LEFT JOIN order_status os_start ON o.id = os_start.order_id
  92. AND os_start.state = 11
  93. AND os_start.rn = 1
  94. /* 关联订单状态-用户确认撤离时间 */
  95. LEFT JOIN order_status os_user_leave ON o.id = os_user_leave.order_id
  96. AND os_user_leave.state = 14
  97. AND os_user_leave.rn = 1
  98. /* 关联订单状态-技师确认离开时间 */
  99. LEFT JOIN order_status os_coach_leave ON o.id = os_coach_leave.order_id
  100. AND os_coach_leave.state = 14
  101. AND os_coach_leave.rn = 1
  102. WHERE
  103. o.deleted_at IS NULL
  104. ORDER BY o.created_at DESC;