Browse Source

fix:修复店铺订单增加几个字段合并了店铺应急订单

景好勇 4 months ago
parent
commit
5013289c99

+ 5 - 0
.vscode/keybindings.json

@@ -87,6 +87,11 @@ enum OrderStatus: int
      */
     case REJECTED = 16;
 
+    /**
+     * 订单状态:报警
+     */
+    case ALARM = 17;
+
     /**
      * 获取状态的显示文本
      *

+ 19 - 17
app/Http/Controllers/Api/DgPayController.php

@@ -1,8 +1,8 @@
--- Active: 1732070527111@@192.168.110.85@3306@xiaoding_test
+-- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
 
 /*
 订单编号是coach_alerts表的order_id,用户名称是coach_alerts表通过order_id关联order表查询出的user_id通过order表的user_id关联member_users表查询出nickname为用户名称,
-项目名称是coach_alerts表通过order_id关联order表查询出的service_id通过order表的service_id关联project表查询出title为项目名称,
+项目名称是coach_alerts表通过order_id关联order表查询出的project_id通过order表的project_id关联project表查询出title为项目名称,
 下单时间是coach_alerts表通过order_id关联的order_records表经过判断order_id是否存在以及state状态是否是接单状态最后都满足则获取order_records表的created_at字段为下单时间,
 支付金额是coach_alerts表通过order_id直接与wallet_payment_records表关联判断订单编号是否存在,存在则获取wallet_payment_records表的actual_amount为支付金额,
 服务状态是coach_alerts表通过order_id关联的order_records表经过判断order_id是否存在以及state最新状态,
@@ -23,8 +23,8 @@
 DROP TABLE IF EXISTS report_alarm_order;
 
 CREATE TABLE report_alarm_order AS
-
 /* 报警订单视图 */
+
 DROP VIEW IF EXISTS manage_alarm_order;
 
 CREATE OR REPLACE VIEW manage_alarm_order AS
@@ -58,23 +58,23 @@ WITH
             )
     )
 SELECT
-    ca.order_id /* 订单编号 */,
-    p.title /* 项目名称 */,
-    mu1.nickname /* 用户名称 */,
-    oct.created_at /* 下单时间 */,
-    wpr.actual_amount /* 支付金额 */,
-    orr.state /* 服务状态 */,
-    mu2.nickname /* 技师昵称 */,
-    cat.created_at /* 技师接单时间 */,
-    t1.area_code /* 区域 */,
-    t1.address /* 地址 */,
-    t1.remark /* 备注 */,
-    mu3.nickname /* 代理商 */,
-    mu3.mobile /* 代理商电话 */
+    ca.order_id as order_id /* 订单编号 */,
+    p.title as project_name /* 项目名称 */,
+    mu1.nickname as user_name /* 用户名称 */,
+    oct.created_at as order_time /* 下单时间 */,
+    wpr.actual_amount as payment_amount /* 支付金额 */,
+    orr.state as service_state /* 服务状态 */,
+    mu2.nickname as coach_name /* 技师昵称 */,
+    cat.created_at as coach_accept_time /* 技师接单时间 */,
+    t1.area_code as area_code /* 区域 */,
+    t1.address as address /* 地址 */,
+    t1.remark as remark /* 备注 */,
+    mu3.nickname as agent_name /* 代理商 */,
+    mu3.mobile as agent_mobile /* 代理商电话 */
 FROM
     coach_alerts ca
     LEFT JOIN `order` t1 ON ca.order_id = t1.id
-    LEFT JOIN project p ON t1.service_id = p.id
+    LEFT JOIN project p ON t1.project_id = p.id
     LEFT JOIN member_users mu1 ON t1.user_id = mu1.id
     LEFT JOIN order_create_time oct ON ca.order_id = oct.order_id
     LEFT JOIN wallet_payment_records wpr ON ca.order_id = wpr.order_id
@@ -93,3 +93,5 @@ WHERE
             order_id = ca.order_id
     )
 ORDER BY ca.order_id DESC;
+
+select * from manage_alarm_order;

+ 79 - 48
doc/系统设计/数据库设计/物理模型/分析后台设计增加/11店铺订单.sql

@@ -4,70 +4,101 @@
 用户类型是order表中的order_source字段,用户昵称/店铺是通过order的order_source字段判断是用户通过平台下单是店铺在平台下应急订单,
 用户昵称是order表通过user_id关联member_users表获取nickname字段为用户名称,
 店铺名称是order表通过shop_id关联shop_auth_records并判断shop_id是否存在存在则获取shop_name字段为店铺名称不存在则空着即可,
-订单类型是order表中的order_type字段,项目名称是order表的service_id关联shop_services表并判断是否存在service_id存在则获取name为项目名称不存在则空着即可,
+订单类型是order表中的order_type字段,项目名称是order表的project_id关联shop_services表并判断是否存在project_id存在则获取name为项目名称不存在则空着即可,
 订单金额是order表total_amount字段,到店时间是order表id关联order_records表并判断状态state为已到店状态时的created_at字段为到店时间,
 订单状态是order表id关联order_records表最新的状态state,
 店铺分成、推广分成、平台抽成都是order表id关联wallet_split_records通过该表中的split_type不同的分账类型去参与分成最后split_amount字段就是店铺分成、推广分成、平台抽成最终字段
 */
 
-/* 
+/*
 基础订单信息与分账记录统计查询
 */
 DROP TABLE IF EXISTS report_shop_order;
+
 CREATE TABLE report_shop_order AS
-WITH order_arrival AS (
-    /* 获取订单到店记录 */
-    SELECT 
-        order_id,
-        created_at AS arrival_time,
-        state
-    FROM order_records 
-    WHERE state = 'ARRIVED' /* 已到店状态 */
-),
-latest_order_status AS (
-    /* 获取订单最新状态 */
-    SELECT 
-        order_id,
-        state AS latest_state
-    FROM order_records 
-    WHERE (order_id, created_at) IN (
-        SELECT 
+/*
+店铺订单视图
+*/
+
+DROP VIEW IF EXISTS manage_shop_order;
+
+CREATE OR REPLACE VIEW manage_shop_order AS
+WITH
+    order_arrival AS (
+        /* 获取订单到店记录 */
+        SELECT
             order_id,
-            MAX(created_at)
-        FROM order_records 
-        GROUP BY order_id
+            created_at AS arrival_time,
+            state
+        FROM order_records /* 关联到店记录 */
+        WHERE
+            state = 10 /* 已到店状态 */
+    ),
+    latest_order_status AS (
+        /* 获取订单最新状态 */
+        SELECT order_id, state AS latest_state
+        FROM order_records /* 关联订单状态 */
+        WHERE (order_id, created_at) IN (
+                SELECT order_id, MAX(created_at)
+                FROM order_records /* 关联订单状态 */
+                GROUP BY
+                    order_id /* 按订单ID分组 */
+            )
+    ),
+    split_amounts AS (
+        /* 获取各类分账金额 */
+        SELECT
+            order_id,
+            MAX(
+                CASE
+                    WHEN split_type = 'SHOP' THEN split_amount
+                    ELSE 0
+                END
+            ) AS shop_amount /* 店铺分成 */,
+            MAX(
+                CASE
+                    WHEN split_type = 'PROMOTION' THEN split_amount
+                    ELSE 0
+                END
+            ) AS promotion_amount /* 推广分成 */,
+            MAX(
+                CASE
+                    WHEN split_type = 'PLATFORM' THEN split_amount
+                    ELSE 0
+                END
+            ) AS platform_amount /* 平台抽成 */
+        FROM wallet_split_records /* 关联分账记录 */
+        GROUP BY
+            order_id /* 按订单ID分组 */
     )
-),
-split_amounts AS (
-    /* 获取各类分账金额 */
-    SELECT 
-        order_id,
-        MAX(CASE WHEN split_type = 'SHOP' THEN split_amount ELSE 0 END) AS shop_amount /* 店铺分成 */,
-        MAX(CASE WHEN split_type = 'PROMOTION' THEN split_amount ELSE 0 END) AS promotion_amount /* 推广分成 */,
-        MAX(CASE WHEN split_type = 'PLATFORM' THEN split_amount ELSE 0 END) AS platform_amount /* 平台抽成 */
-    FROM wallet_split_records
-    GROUP BY order_id
-)
-SELECT 
-    o.order_source as order_source /* 用户类型 */,
-    CASE 
-        WHEN o.order_source = 'USER' THEN mu.nickname 
-        WHEN o.order_source = 'SHOP' THEN sar.shop_name 
-        ELSE NULL 
+SELECT
+    o.source as source /* 订单来源 */,
+    CASE
+        WHEN o.source = 1 THEN mu.nickname
+        WHEN o.source = 2 THEN sar.shop_name
+        ELSE NULL
     END as source_name /* 用户昵称/店铺名称 */,
-    o.order_type as order_type /* 订单类型 */,
+    o.type as type /* 订单类型 */,
     ss.name as service_name /* 项目名称 */,
     o.total_amount as total_amount /* 订单金额 */,
     oa.arrival_time as arrival_time /* 到店时间 */,
     los.latest_state as latest_state /* 订单状态 */,
+    COALESCE(sar.contact_phone, '') as shop_phone /* 店铺联系电话 */,
+    COALESCE(mu.mobile, '') as coach_phone /* 技师联系方式 */,
+    o.area_code as area_code /* 区域 */,
+    o.address as address /* 位置 */,
+    o.distance as distance /* 距离 */,
     COALESCE(sa.shop_amount, 0) as shop_amount /* 店铺分成 */,
     COALESCE(sa.promotion_amount, 0) as promotion_amount /* 推广分成 */,
     COALESCE(sa.platform_amount, 0) as platform_amount /* 平台抽成 */
-FROM `order` o
-LEFT JOIN member_users mu ON o.user_id = mu.id /* 关联用户信息 */
-LEFT JOIN shop_auth_records sar ON o.shop_id = sar.shop_id /* 关联店铺信息 */
-LEFT JOIN shop_services ss ON o.service_id = ss.id /* 关联服务项目 */
-LEFT JOIN order_arrival oa ON o.id = oa.order_id /* 关联到店记录 */
-LEFT JOIN latest_order_status los ON o.id = los.order_id /* 关联最新状态 */
-LEFT JOIN split_amounts sa ON o.id = sa.order_id /* 关联分账信息 */
-ORDER BY o.id DESC /* 按订单ID倒序排列 */;
+FROM
+    `order` o
+    LEFT JOIN member_users mu ON o.user_id = mu.id /* 关联用户信息 */
+    LEFT JOIN shop_auth_records sar ON o.shop_id = sar.shop_id /* 关联店铺信息 */
+    LEFT JOIN shop_services ss ON o.project_id = ss.id /* 关联服务项目 */
+    LEFT JOIN order_arrival oa ON o.id = oa.order_id /* 关联到店记录 */
+    LEFT JOIN latest_order_status los ON o.id = los.order_id /* 关联最新状态 */
+    LEFT JOIN split_amounts sa ON o.id = sa.order_id /* 关联分账信息 */
+ORDER BY o.id DESC /* 按订单ID倒序排列 */;
+
+select * from manage_shop_order;

+ 38 - 23
doc/系统设计/数据库设计/物理模型/分析后台设计增加/12店铺应急订单统计.sql

@@ -3,8 +3,6 @@
 /*
 您是一位专业的dba,同时会业务分析。请参考以上数据库的设计文档,给我写一个sql,关联查询出:xxx字段
 AI一般会出现的问题 用户表是member_users表  技师名称最终实在用户表找到的
-
-
 店铺名称是order表通过shop_id关联shop_auth_records表并判断shop_id是否存在存在则获取shop_name字段为店铺名称不存在则空着即可,
 项目名称是order表的service_id关联shop_services表并判断service_id是否存在,存在则获取name字段为项目名称不存在则空着即可,
 下单时间是order表id关联order_records表并判断state字段的状态为用户下单获取created_at字段为下单时间,
@@ -17,23 +15,38 @@ AI一般会出现的问题 用户表是member_users表  技师名称最终实在
 存在则通过判断split_type分账类型去获取对应的split_amount分账金额字段做为平台收入
 */
 
-/* 
+/*
 查询订单相关信息包括:
 店铺名称、项目名称、下单时间、下单金额、技师名称、到达时间、区域、位置、
 店铺联系电话、技师联系方式、距离、平台收入
 */
 DROP TABLE IF EXISTS report_shop_emergency_order;
+
 CREATE TABLE report_shop_emergency_order AS
-WITH order_times AS (
-    SELECT 
-        order_id,
-        MAX(CASE WHEN state = 'USER_SUBMIT' THEN created_at END) AS submit_time /* 下单时间 */,
-        MAX(CASE WHEN state = 'COACH_ARRIVED' THEN created_at END) AS arrive_time /* 到达时间 */
-    FROM order_records
-    WHERE state IN ('USER_SUBMIT', 'COACH_ARRIVED')
-    GROUP BY order_id
-)
-SELECT 
+WITH
+    order_times AS (
+        SELECT
+            order_id,
+            MAX(
+                CASE
+                    WHEN state = 'USER_SUBMIT' THEN created_at
+                END
+            ) AS submit_time /* 下单时间 */,
+            MAX(
+                CASE
+                    WHEN state = 'COACH_ARRIVED' THEN created_at
+                END
+            ) AS arrive_time /* 到达时间 */
+        FROM order_records
+        WHERE
+            state IN (
+                'USER_SUBMIT',
+                'COACH_ARRIVED'
+            )
+        GROUP BY
+            order_id
+    )
+SELECT
     ord.id as order_id /* 订单编号 */,
     COALESCE(sar.shop_name, '') as shop_name /* 店铺名称 */,
     COALESCE(ss.name, '') as service_name /* 项目名称 */,
@@ -47,14 +60,16 @@ SELECT
     COALESCE(mu.mobile, '') as coach_phone /* 技师联系方式 */,
     ord.distance as distance /* 距离 */,
     COALESCE(wsr.split_amount, 0.00) as platform_income /* 平台收入 */
-FROM `order` ord /* 使用反引号避免关键字冲突,使用别名ord */
-LEFT JOIN shop_auth_records sar ON ord.shop_id = sar.shop_id /* 关联店铺认证信息 */
-LEFT JOIN shop_services ss ON ord.service_id = ss.id /* 关联店铺服务 */
-LEFT JOIN order_times ot ON ord.id = ot.order_id /* 关联订单时间 */
-LEFT JOIN coach_users cu ON ord.coach_id = cu.id /* 关联技师用户 */
-LEFT JOIN member_users mu ON cu.user_id = mu.id /* 关联会员用户 */
-LEFT JOIN wallet_split_records wsr ON ord.id = wsr.order_id 
+FROM
+    `order` ord /* 使用反引号避免关键字冲突,使用别名ord */
+    LEFT JOIN shop_auth_records sar ON ord.shop_id = sar.shop_id /* 关联店铺认证信息 */
+    LEFT JOIN shop_services ss ON ord.service_id = ss.id /* 关联店铺服务 */
+    LEFT JOIN order_times ot ON ord.id = ot.order_id /* 关联订单时间 */
+    LEFT JOIN coach_users cu ON ord.coach_id = cu.id /* 关联技师用户 */
+    LEFT JOIN member_users mu ON cu.user_id = mu.id /* 关联会员用户 */
+    LEFT JOIN wallet_split_records wsr ON ord.id = wsr.order_id
     AND wsr.split_type = 'PLATFORM_SHARE' /* 关联钱包分账记录-平台分成 */
-WHERE 1=1
-/* 这里可以添加其他筛选条件,如时间范围、订单状态等 */
-ORDER BY ord.id DESC /* 按订单编号倒序排序 */
+WHERE
+    1 = 1
+    /* 这里可以添加其他筛选条件,如时间范围、订单状态等 */
+ORDER BY ord.id DESC /* 按订单编号倒序排序 */