08订单管理.sql 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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;
  105. /* 订单管理新视图 */
  106. DROP VIEW IF EXISTS v_order_list;
  107. CREATE OR REPLACE VIEW v_order_list AS
  108. SELECT
  109. o.id AS id /* id */,
  110. o.order_no AS order_no /* 订单交易编号 */,
  111. o.`type` AS `type` /* 订单类型 */,
  112. o.`source` AS `source` /* 订单来源 */,
  113. o.payment_type AS payment_type /* 支付方式 */,
  114. o.project_amount AS project_amount /* 项目金额 */,
  115. o.traffic_amount AS traffic_amount /* 路费 */,
  116. o.total_amount AS total_amount /* 订单金额 */,
  117. o.balance_amount AS balance_amount /* 余额支付金额 */,
  118. o.pay_amount AS pay_amount /* 支付金额 */,
  119. o.discount_amount AS discount_amount /* 优惠金额 */,
  120. o.tip_amount AS tip_amount /* 打赏金额 */,
  121. o.distance AS distance /* 距离 */,
  122. o.latitude AS latitude /* 客户纬度 */,
  123. o.longitude AS longitude /* 客户经度 */,
  124. o.location AS location /* 客户位置 */,
  125. o.address AS address /* 客户地址 */,
  126. o.area_code AS area_code /* 客户区域 */,
  127. o.remark AS remark /* 客户备注 */,
  128. o.created_at AS created_at /* 下单时间 */,
  129. o.state AS state /* 订单状态 */,
  130. o.service_start_time AS service_start_time /* 开始服务时间 */,
  131. o.service_end_time AS service_end_time /* 结束服务时间 */,
  132. mu.id AS user_id, /* 用户ID */
  133. mu.nickname AS user_nickname /* 用户昵称 */,
  134. mu.mobile AS user_mobile /* 用户联系方式 */,
  135. cu.id AS coach_id, /* 技师ID */
  136. cu.level AS coach_level /* 技师等级 */,
  137. cu.work_status AS coach_work_status /* 技师工作状态 */,
  138. cu.formal_photo AS coach_formal_photo /* 技师正装照 */,
  139. cu.score AS coach_score /* 技师评分 */,
  140. cir.id AS coach_info_id, /* 技师信息ID */
  141. cir.nickname AS coach_nickname /* 技师昵称 */,
  142. cir.mobile AS coach_mobile /* 技师联系方式 */,
  143. cir.avatar AS coach_avatar /* 技师头像 */,
  144. p.id AS project_id, /* 项目ID */
  145. p.title AS project_name /* 项目名称 */,
  146. p.price AS project_price /* 项目金额 */,
  147. p.duration AS service_duration /* 服务时长 */,
  148. p.cover AS project_cover /* 项目封面 */,
  149. sa.id AS shop_id, /* 店铺ID */
  150. sa.shop_name AS shop_name, /* 店铺名称 */
  151. ara.id AS agent_id, /* 代理商ID */
  152. ara.real_name AS real_name, /* 代理商 */
  153. /* 客户订单统计 */
  154. COUNT(CASE WHEN o.type != 3 AND o.state = 12 THEN 1 END) as order_count /* 订单次数 */,
  155. COUNT(CASE WHEN o.type = 3 AND o.state = 12 THEN 1 END) as overtime_count /* 加钟次数 */,
  156. COUNT(CASE WHEN o.tip_amount IS NOT NULL AND o.tip_amount > 0 AND o.state = 12 THEN 1 END) as reward_count, /* 打赏次数 */
  157. /* 技师订单统计 */
  158. COUNT(CASE WHEN o.type != 3 AND o.state = 12 THEN 1 END) OVER (PARTITION BY o.coach_id) as coach_order_count /* 技师订单次数 */,
  159. COUNT(CASE WHEN o.type = 3 AND o.state = 12 THEN 1 END) OVER (PARTITION BY o.coach_id) as coach_overtime_count /* 技师加钟次数 */
  160. FROM `order` o
  161. LEFT JOIN member_users mu ON o.user_id = mu.id
  162. LEFT JOIN coach_users cu ON o.coach_id = cu.id
  163. LEFT JOIN coach_info_records cir ON cu.info_record_id = cir.id
  164. LEFT JOIN project p ON o.project_id = p.id /* 关联项目表 */
  165. LEFT JOIN shop_auth_records sa ON o.shop_id = sa.shop_id /* 关联店铺认证表 */
  166. LEFT JOIN agent_real_auth_records ara ON o.agent_id = ara.agent_id /* 关联法人认证表 */
  167. GROUP BY o.id, o.order_no, o.type, o.source, o.payment_type, o.project_amount, o.traffic_amount,
  168. o.total_amount, o.balance_amount, o.pay_amount, o.discount_amount, o.tip_amount,
  169. o.distance, o.latitude, o.longitude, o.location, o.address, o.area_code,
  170. o.remark, o.created_at, o.state, o.service_start_time, o.service_end_time,
  171. mu.id, mu.nickname, mu.mobile, cu.id, cu.level, cu.work_status,
  172. cu.formal_photo, cu.score, cir.id, cir.nickname, cir.mobile, cir.avatar,
  173. p.id, p.title, p.price, p.duration, p.cover, sa.id, sa.shop_name,
  174. ara.id, ara.real_name;