소스 검색

feat:创建视图

景好勇 4 달 전
부모
커밋
a9a0ab57a1

+ 55 - 25
doc/系统设计/数据库设计/物理模型/分析后台设计增加/03技师认证.sql

@@ -1,30 +1,55 @@
 DROP TABLE IF EXISTS report_coach_auth;
+
 CREATE TABLE report_coach_auth AS
-WITH 
-/* 资质证书信息 */
-qualification_photos AS (
-    SELECT 
-        cq.id,
-        /* 从业资格证 */
-        MAX(CASE WHEN cq.qual_type = 'QUALIFICATION' THEN cq.qual_photo END) AS qualification_photo,
-        /* 健康证 */
-        MAX(CASE WHEN cq.qual_type = 'HEALTH' THEN cq.qual_photo END) AS health_photo,
-        /* 生活照 */
-        MAX(CASE WHEN cq.qual_type = 'LIFE_PHOTO' THEN cq.qual_photo END) AS life_photo,
-        /* 工作照 */
-        MAX(CASE WHEN cq.qual_type = 'WORK_PHOTO' THEN cq.qual_photo END) AS work_photo
-    FROM coach_qual_records cq
-    WHERE cq.deleted_at IS NULL
-    GROUP BY cq.id
-)
-SELECT 
+
+/* 技师认证视图 */
+
+DROP VIEW IF EXISTS manage_coach_auth;
+
+CREATE OR REPLACE VIEW manage_coach_auth AS
+WITH
+    /* 资质证书信息 */
+    qualification_photos AS (
+        SELECT
+            cq.id,
+            /* 从业资格证 */
+            MAX(
+                CASE
+                    WHEN cq.qual_type = 'QUALIFICATION' THEN cq.qual_photo
+                END
+            ) AS qualification_photo,
+            /* 健康证 */
+            MAX(
+                CASE
+                    WHEN cq.qual_type = 'HEALTH' THEN cq.qual_photo
+                END
+            ) AS health_photo,
+            /* 生活照 */
+            MAX(
+                CASE
+                    WHEN cq.qual_type = 'LIFE_PHOTO' THEN cq.qual_photo
+                END
+            ) AS life_photo,
+            /* 工作照 */
+            MAX(
+                CASE
+                    WHEN cq.qual_type = 'WORK_PHOTO' THEN cq.qual_photo
+                END
+            ) AS work_photo
+        FROM coach_qual_records cq
+        WHERE
+            cq.deleted_at IS NULL
+        GROUP BY
+            cq.id
+    )
+SELECT
     ci.nickname as nickname /* 技师昵称 */,
     ci.gender as gender /* 性别 */,
     ci.birthday as birthday /* 出生日期 */,
     ci.intention_city as intention_city /* 期望城市 */,
     ci.mobile as mobile /* 手机号码 */,
     ci.introduction as introduction /* 个人简介 */,
-    CASE 
+    CASE
         WHEN cu.real_auth_record_id IS NULL THEN '未认证'
         WHEN cu.qualification_record_id IS NULL THEN '实名认证完成'
         ELSE '全部认证完成'
@@ -36,10 +61,15 @@ SELECT
     qp.health_photo as health_photo /* 健康证 */,
     qp.life_photo as life_photo /* 生活照 */,
     qp.work_photo as work_photo /* 工作照 */
-FROM coach_users cu
-LEFT JOIN coach_info_records ci ON cu.info_record_id = ci.id 
-LEFT JOIN coach_real_records cr ON cu.real_auth_record_id = cr.id
-LEFT JOIN qualification_photos qp ON cu.qualification_record_id = qp.id
-WHERE cu.deleted_at IS NULL
+FROM
+    coach_users cu
+    LEFT JOIN coach_info_records ci ON cu.info_record_id = ci.id
+    LEFT JOIN coach_real_records cr ON cu.real_auth_record_id = cr.id
+    LEFT JOIN qualification_photos qp ON cu.qualification_record_id = qp.id
+WHERE
+    cu.deleted_at IS NULL
     AND ci.deleted_at IS NULL
-    AND (cr.deleted_at IS NULL OR cr.deleted_at IS NULL);
+    AND (
+        cr.deleted_at IS NULL
+        OR cr.deleted_at IS NULL
+    );

+ 15 - 8
doc/系统设计/数据库设计/物理模型/分析后台设计增加/04平台项目管理.sql

@@ -1,6 +1,13 @@
 -- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
 DROP TABLE IF EXISTS report_project_list;
+
 CREATE TABLE report_project_list AS
+
+/* 项目列表视图 */
+
+DROP VIEW IF EXISTS manage_project_list;
+
+CREATE OR REPLACE VIEW manage_project_list AS
 WITH
     order_stats AS (
         /* 统计每个项目的订单数量 */
@@ -11,14 +18,14 @@ WITH
         GROUP BY
             service_id
     )
-SELECT 
-    p.id as project_id /* 项目编号 */, 
-    p.title as project_title /* 项目名称 */, 
-    pc.name as category_name /* 项目分类名称 */, 
-    p.price as project_price /* 项目价格 */, 
-    p.duration as service_duration /* 服务时长(分钟) */, 
-    COALESCE(os.count, 0) as order_count /* 下单数量 */, 
-    p.state as project_state /* 状态 */, 
+SELECT
+    p.id as project_id /* 项目编号 */,
+    p.title as project_title /* 项目名称 */,
+    pc.name as category_name /* 项目分类名称 */,
+    p.price as project_price /* 项目价格 */,
+    p.duration as service_duration /* 服务时长(分钟) */,
+    COALESCE(os.count, 0) as order_count /* 下单数量 */,
+    p.state as project_state /* 状态 */,
     p.cover as project_cover /* 项目封面图片 */
 FROM
     project p

+ 7 - 1
doc/系统设计/数据库设计/物理模型/分析后台设计增加/05店铺列表.sql

@@ -4,8 +4,14 @@
 项目名称、项目分类、项目价格、项目时长、项目分成、区域管理、下单数量、状态、图片、开启/关闭
 */
 DROP TABLE IF EXISTS report_shop_list;
+
 CREATE TABLE report_shop_list AS
-WITH RECURSIVE
+
+/* 店铺列表视图 */
+DROP VIEW IF EXISTS manage_shop_list;
+
+CREATE OR REPLACE VIEW manage_shop_list AS
+WITH
     /* 店铺技师数量统计 */
     coach_count AS (
         SELECT cu.shop_id, COUNT(DISTINCT cu.id) /* 技师总数 */ AS coach_total

+ 28 - 18
doc/系统设计/数据库设计/物理模型/分析后台设计增加/07代理列表.sql

@@ -1,6 +1,6 @@
 -- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
 /*
-    您是一位专业的dba,同时会业务分析。请参考以上数据库的设计文档,给我写一个sql,关联查询出:代理昵称、申请时间、性别、头像、联系电话、代理地区、总收益金额、体现金额、余额
+您是一位专业的dba,同时会业务分析。请参考以上数据库的设计文档,给我写一个sql,关联查询出:代理昵称、申请时间、性别、头像、联系电话、代理地区、总收益金额、体现金额、余额
 请按照的我的要求生成查询sql语句:
 1. 请从如下 agent_infos   member_users   wallet  wallet_withdraw_records等一些表查找
 2. agent_infos通过user_id关联的member_users表
@@ -8,20 +8,28 @@
 4. wallet_withdraw_records和wallet通过wallet_id关联
 */
 DROP TABLE IF EXISTS report_agent_list;
+
 CREATE TABLE report_agent_list AS
+
 /* 代理信息统计查询 */
-WITH agent_withdraw AS (
-    SELECT 
-        w.owner_id,
-        COALESCE(SUM(wr.amount), 0) AS total_withdraw_amount /* 总提现金额 */
-    FROM wallet w
-    LEFT JOIN wallet_withdraw_records wr ON w.id = wr.wallet_id 
-        AND wr.audit_state = 'approved' 
-        AND wr.state = 'success'
-    WHERE w.owner_type = 'AGENT'
-    GROUP BY w.owner_id
-)
-SELECT 
+/* 代理列表视图 */
+DROP VIEW IF EXISTS manage_agent_list;
+
+CREATE OR REPLACE VIEW manage_agent_list AS
+WITH
+    agent_withdraw AS (
+        SELECT w.owner_id, COALESCE(SUM(wr.amount), 0) AS total_withdraw_amount /* 总提现金额 */
+        FROM
+            wallet w
+            LEFT JOIN wallet_withdraw_records wr ON w.id = wr.wallet_id
+            AND wr.audit_state = 'approved'
+            AND wr.state = 'success'
+        WHERE
+            w.owner_type = 'AGENT'
+        GROUP BY
+            w.owner_id
+    )
+SELECT
     mu.nickname as agent_nickname /* 代理昵称 */,
     ai.created_at as apply_time /* 申请时间 */,
     mu.gender as gender /* 性别 */,
@@ -31,11 +39,13 @@ SELECT
     COALESCE(w.total_income, 0) as total_income /* 总收益金额 */,
     COALESCE(aw.total_withdraw_amount, 0) as withdraw_amount /* 提现金额 */,
     COALESCE(w.available_balance, 0) as balance /* 余额 */
-FROM agent_infos ai
-INNER JOIN member_users mu ON ai.user_id = mu.id
-LEFT JOIN wallet w ON w.owner_id = ai.id 
+FROM
+    agent_infos ai
+    INNER JOIN member_users mu ON ai.user_id = mu.id
+    LEFT JOIN wallet w ON w.owner_id = ai.id
     AND w.owner_type = 'AGENT'
-LEFT JOIN agent_withdraw aw ON aw.owner_id = mu.id
-WHERE ai.deleted_at IS NULL
+    LEFT JOIN agent_withdraw aw ON aw.owner_id = mu.id
+WHERE
+    ai.deleted_at IS NULL
     AND mu.deleted_at IS NULL
     AND w.deleted_at IS NULL;

+ 7 - 2
doc/系统设计/数据库设计/物理模型/分析后台设计增加/08订单管理.sql

@@ -1,6 +1,6 @@
 -- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
 
-/* 
+/*
 订单编号是order表的id,项目名称是order表通过service_id与project表关联查询出项目名称title,
 用户名称是order表通过user_id和member_users表关联查询出用户姓名nickname,
 下单时间是order表的中的created_at,支付金额、支付方式是order表的id与 wallet_payment_records表的order_id关联查询出,
@@ -13,11 +13,16 @@
 上级订单项目是因为客户在原有订单基础上再次下单从而产生的关联原有订单项目名称,
 用户确认撤离时间、技师确认离开时间都是从order_records表中的created_at字段。
 补充逻辑:技师名称是根据order表的coach_is与coach_users关联查询出user_id再与用户表关联查询出技师名称
-
 先不要了没设计: 营销类型  砍价减免金额  打赏金额  悬赏金额  跟单客服是系统表里的
 */
 DROP TABLE IF EXISTS report_order_list;
+
 CREATE TABLE report_order_list AS
+
+/* 订单列表视图 */
+DROP VIEW IF EXISTS manage_order_list;
+
+CREATE OR REPLACE VIEW manage_order_list AS
 WITH
     order_status AS (
         SELECT

+ 32 - 36
doc/系统设计/数据库设计/物理模型/分析后台设计增加/09异常订单.sql

@@ -1,4 +1,5 @@
 -- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
+
 /*
 订单编号是order_exc_records表中的order_id字段,项目名称是order_exc_records表通过order_id关联order表查询出service_id项目编号再去关联project表查询出项目名称title,
 用户名称是order_exc_records通过order_id关联order表查询出user_id再去和member_users表关联查询出用户名称nickname,
@@ -13,48 +14,43 @@
 存在则再去通过state判断下单状态得出created_at下单时间,如果不存在则空着即可,
 区域是order_exc_records表通过order_id关联的order表中的area_code字段,地址是order_exc_records表通过order_id关联的order表中的address字段,
 备注是order_exc_records表通过order_id关联的order表中的remark字段,订单来源是order_exc_records表通过order_id关联的order表中的order_source字段
-
 补充逻辑:用户表是member_users表,技师表是coach_users表,店铺表是shop_auth_records表
-
 不查询字段:跟单客服是系统表获取的
 */
 DROP TABLE IF EXISTS report_order_exception;
+
 CREATE TABLE report_order_exception AS
-SELECT 
-    oer.order_id as order_id /* 订单编号 */,
-    p.title as project_title /* 项目名称 */,
-    mu.nickname as user_name /* 用户名称 */,
+/* 异常订单视图 */
+DROP VIEW IF EXISTS manage_order_exception;
+
+CREATE OR REPLACE VIEW manage_order_exception AS
+SELECT
+    oer.order_id /* 订单编号 */,
+    p.title /* 项目名称 */,
+    mu.nickname /* 用户名称 */,
     orr.created_at as order_time /* 下单时间 */,
-    wpr.actual_amount as payment_amount /* 支付金额 */,
-    wpr.payment_method as payment_method /* 支付方式 */,
-    orr.state as service_state /* 服务状态 */,
-    CASE 
-        WHEN o.order_source = 'coach' THEN u_coach.nickname /* 技师昵称 */
-        WHEN o.order_source = 'shop' THEN sar.shop_name /* 店铺名称 */
+    wpr.actual_amount /* 支付金额 */,
+    wpr.payment_method /* 支付方式 */,
+    orr.state /* 服务状态 */,
+    CASE
+        WHEN o.order_source = '1' THEN u_coach.nickname /* 技师昵称 */
+        WHEN o.order_source = '2' THEN sar.shop_name /* 店铺名称 */
         ELSE NULL
-    END as accept_name /* 技师/店铺 */,
+    END /* 技师/店铺 */,
     orr.created_at as accept_time /* 技师/店铺接单时间 */,
-    o.area_code as area_code /* 区域 */,
-    o.address as address /* 地址 */,
-    o.remark as remark /* 备注 */,
-    o.order_source as order_source /* 订单来源 */
-FROM 
+    o.area_code /* 区域 */,
+    o.address /* 地址 */,
+    o.remark /* 备注 */,
+    o.order_source /* 订单来源 */
+FROM
     order_exc_records oer
-LEFT JOIN 
-    order_records orr ON oer.order_id = orr.order_id /* 关联订单记录表 */
-LEFT JOIN 
-    `order` o ON oer.order_id = o.id /* 关联订单表 */
-LEFT JOIN 
-    project p ON o.service_id = p.id /* 关联项目表 */
-LEFT JOIN 
-    member_users mu ON o.user_id = mu.id /* 关联用户表 */
-LEFT JOIN 
-    wallet_payment_records wpr ON oer.order_id = wpr.order_id /* 关联支付记录表 */
-LEFT JOIN 
-    coach_users cu ON o.coach_id = cu.id /* 关联技师用户表 */
-LEFT JOIN 
-    member_users u_coach ON cu.user_id = u_coach.id /* 关联用户表获取技师昵称 */
-LEFT JOIN 
-    shop_auth_records sar ON o.shop_id = sar.id /* 关联店铺认证记录表 */
-WHERE 
-    orr.state IS NOT NULL /* 确保订单状态存在 */
+    LEFT JOIN order_records orr ON oer.order_id = orr.order_id /* 关联订单记录表 */
+    LEFT JOIN `order` o ON oer.order_id = o.id /* 关联订单表 */
+    LEFT JOIN project p ON o.service_id = p.id /* 关联项目表 */
+    LEFT JOIN member_users mu ON o.user_id = mu.id /* 关联用户表 */
+    LEFT JOIN wallet_payment_records wpr ON oer.order_id = wpr.order_id /* 关联支付记录表 */
+    LEFT JOIN coach_users cu ON o.coach_id = cu.id /* 关联技师用户表 */
+    LEFT JOIN member_users u_coach ON cu.user_id = u_coach.id /* 关联用户表获取技师昵称 */
+    LEFT JOIN shop_auth_records sar ON o.shop_id = sar.id /* 关联店铺认证记录表 */
+WHERE
+    orr.state IS NOT NULL /* 确保订单状态存在 */

+ 70 - 61
doc/系统设计/数据库设计/物理模型/分析后台设计增加/10报警订单.sql

@@ -13,74 +13,83 @@
 备注是coach_alerts表的order_id关联的order表中的remark字段,
 代理商是coach_alerts表的order_id关联的order表获取agent_id再去关联agent_infos表获取user_id再去关联member_users表中的nickname字段为代理商,
 代理商电话是coach_alerts表的order_id关联的order表获取agent_id再去关联agent_infos表获取user_id再去关联member_users表中的mobile字段为代理商电话
-
 查询不出的字段:跟单客服是系统表的
 没设计的字段:附近站点电话、负责人电话
 */
 
-/* 
+/*
 查询订单编号、项目名称、用户名称、下单时间、支付金额、服务状态、技师、技师接单时间、区域、地址、备注、代理商、代理商电话
 */
 DROP TABLE IF EXISTS report_alarm_order;
+
 CREATE TABLE report_alarm_order AS
-WITH order_create_time AS (
-    /* 获取下单时间 */
-    SELECT 
-        order_id,
-        created_at 
-    FROM order_records ord1 
-    WHERE state = '接单状态' /* 请替换为实际的接单状态值 */
-    AND created_at = (
-        SELECT MIN(created_at) 
-        FROM order_records ord2 
-        WHERE ord1.order_id = ord2.order_id 
-        AND state = '接单状态'
+
+/* 报警订单视图 */
+DROP VIEW IF EXISTS manage_alarm_order;
+
+CREATE OR REPLACE VIEW manage_alarm_order AS
+WITH
+    order_create_time AS (
+        /* 获取下单时间 */
+        SELECT order_id, created_at
+        FROM order_records ord1
+        WHERE
+            state = '接单状态' /* 请替换为实际的接单状态值 */
+            AND created_at = (
+                SELECT MIN(created_at)
+                FROM order_records ord2
+                WHERE
+                    ord1.order_id = ord2.order_id
+                    AND state = '接单状态'
+            )
+    ),
+    coach_accept_time AS (
+        /* 获取技师接单时间 */
+        SELECT order_id, created_at
+        FROM order_records ord1
+        WHERE
+            state = '技师接单状态' /* 请替换为实际的技师接单状态值 */
+            AND created_at = (
+                SELECT MIN(created_at)
+                FROM order_records ord2
+                WHERE
+                    ord1.order_id = ord2.order_id
+                    AND state = '技师接单状态'
+            )
     )
-),
-coach_accept_time AS (
-    /* 获取技师接单时间 */
-    SELECT 
-        order_id,
-        created_at 
-    FROM order_records ord1 
-    WHERE state = '技师接单状态' /* 请替换为实际的技师接单状态值 */
-    AND created_at = (
-        SELECT MIN(created_at) 
-        FROM order_records ord2 
-        WHERE ord1.order_id = ord2.order_id 
-        AND state = '技师接单状态'
+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 /* 代理商电话 */
+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 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
+    LEFT JOIN order_records orr ON ca.order_id = orr.order_id
+    LEFT JOIN coach_users cu ON t1.coach_id = cu.id
+    LEFT JOIN member_users mu2 ON cu.user_id = mu2.id
+    LEFT JOIN coach_accept_time cat ON ca.order_id = cat.order_id
+    LEFT JOIN agent_infos ai ON t1.agent_id = ai.id
+    LEFT JOIN member_users mu3 ON ai.user_id = mu3.id
+WHERE
+    orr.created_at = (
+        /* 获取最新状态记录 */
+        SELECT MAX(created_at)
+        FROM order_records
+        WHERE
+            order_id = ca.order_id
     )
-)
-SELECT 
-    ca.order_id as order_id /* 订单编号 */,
-    p.title as project_title /* 项目名称 */,
-    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 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
-LEFT JOIN order_records orr ON ca.order_id = orr.order_id
-LEFT JOIN coach_users cu ON t1.coach_id = cu.id
-LEFT JOIN member_users mu2 ON cu.user_id = mu2.id
-LEFT JOIN coach_accept_time cat ON ca.order_id = cat.order_id
-LEFT JOIN agent_infos ai ON t1.agent_id = ai.id
-LEFT JOIN member_users mu3 ON ai.user_id = mu3.id
-WHERE orr.created_at = (
-    /* 获取最新状态记录 */
-    SELECT MAX(created_at)
-    FROM order_records
-    WHERE order_id = ca.order_id
-)
-ORDER BY ca.order_id DESC;
+ORDER BY ca.order_id DESC;