Ver Fonte

feat:增加了钱包角色枚举

景好勇 há 4 meses atrás
pai
commit
3859a52c3b

+ 139 - 0
app/Enums/WalletRoleType.php

@@ -0,0 +1,139 @@
+<?php
+
+namespace App\Enums;
+
+/**
+ * 钱包角色类型枚举类
+ */
+enum WalletRoleType: int
+{
+    /**
+     * 角色类型:平台自有资金钱包
+     */
+    case PLATFORM_OWN = 1;
+
+    /**
+     * 角色类型:平台代收代付钱包
+     */
+    case PLATFORM_ESCROW = 2;
+
+    /**
+     * 角色类型:用户钱包
+     */
+    case USER = 3;
+
+    /**
+     * 角色类型:技师钱包
+     */
+    case TECHNICIAN = 4;
+
+    /**
+     * 角色类型:店铺钱包
+     */
+    case SHOP = 5;
+
+    /**
+     * 角色类型:代理商钱包
+     */
+    case AGENT = 6;
+
+    /**
+     * 角色类型:业务员钱包
+     */
+    case SALESMAN = 7;
+
+    /**
+     * 角色类型:其他
+     */
+    case OTHER = 8;
+
+    /**
+     * 获取类型的显示文本
+     *
+     * @return string 类型的中文描述
+     */
+    public function label(): string
+    {
+        return match ($this) {
+            self::PLATFORM_OWN => '平台自有资金钱包',
+            self::PLATFORM_ESCROW => '平台代收代付钱包',
+            self::USER => '用户钱包',
+            self::TECHNICIAN => '技师钱包',
+            self::SHOP => '店铺钱包',
+            self::AGENT => '代理商钱包',
+            self::SALESMAN => '业务员钱包',
+            self::OTHER => '其他',
+        };
+    }
+
+    /**
+     * 获取类型的整数值
+     *
+     * @return int 类型值
+     */
+    public function value(): int
+    {
+        return $this->value;
+    }
+
+    /**
+     * 检查当前类型是否与指定类型相同
+     *
+     * @param self $type 要比较的类型
+     * @return bool 如果类型相同返回 true,否则返回 false
+     */
+    public function is(self $type): bool
+    {
+        return $this === $type;
+    }
+
+    /**
+     * 根据整数值创建对应的类型枚举实例
+     *
+     * @param int $value 类型值
+     * @return self|null 返回对应的类型枚举实例,如果值无效则返回 null
+     */
+    public static function fromValue(int $value): ?self
+    {
+        return match ($value) {
+            self::PLATFORM_OWN->value => self::PLATFORM_OWN,
+            self::PLATFORM_ESCROW->value => self::PLATFORM_ESCROW,
+            self::USER->value => self::USER,
+            self::TECHNICIAN->value => self::TECHNICIAN,
+            self::SHOP->value => self::SHOP,
+            self::AGENT->value => self::AGENT,
+            self::SALESMAN->value => self::SALESMAN,
+            self::OTHER->value => self::OTHER,
+            default => null
+        };
+    }
+
+    /**
+     * 获取所有类型的值数组
+     *
+     * @return array 包含所有类型值的数组
+     */
+    public static function values(): array
+    {
+        return array_column(self::cases(), 'value');
+    }
+
+    /**
+     * 获取所有类型的键值对数组
+     *
+     * @return array 类型值作为键,显示文本作为值的关联数组
+     */
+    public static function all(): array
+    {
+        return [
+            self::PLATFORM_OWN->value => self::PLATFORM_OWN->label(),
+            self::PLATFORM_ESCROW->value => self::PLATFORM_ESCROW->label(),
+            self::USER->value => self::USER->label(),
+            self::TECHNICIAN->value => self::TECHNICIAN->label(),
+            self::SHOP->value => self::SHOP->label(),
+            self::AGENT->value => self::AGENT->label(),
+            self::SALESMAN->value => self::SALESMAN->label(),
+            self::OTHER->value => self::OTHER->label(),
+        ];
+    }
+}

+ 9 - 0
doc/系统设计/数据库设计/概念模型/新概念.md

@@ -589,6 +589,15 @@ export_on_save:
     - 属性:
         - 所属主体编号(外键)
         - 钱包类型(外键)
+            - 枚举类型
+                - 平台自有资金钱包
+                - 平台代收代付钱包
+                - 用户钱包
+                - 技师钱包
+                - 店铺钱包
+                - 代理商钱包
+                - 业务员钱包
+                - 其他
         - 总余额
         - 可用余额
         - 冻结金额

+ 67 - 52
doc/系统设计/数据库设计/物理模型/分析后台设计增加/14提现管理.sql

@@ -18,60 +18,74 @@
 审核人是wallet_withdraw_records表中的auditor字段,体现时间是wallet_withdraw_records表中的withdraw_time字段,
 体现状态是wallet_withdraw_record表中的audit_state字段,区/县是wallet_withdraw_records表中的area_code字段,
 剩余金额是wallet_withdraw_record表通过wallet_id关联wallet表获取available_balance字段做为剩余金额
-
 */
 
 DROP TABLE IF EXISTS report_withdraw_management;
+
 CREATE TABLE report_withdraw_management AS
-WITH withdraw_detail AS (
-    SELECT 
-        wwr.id /* 提现记录ID */,
-        CASE w.owner_type
-            WHEN '技师角色' THEN (
-                SELECT mu.nickname 
-                FROM coach_users cu 
-                LEFT JOIN member_users mu ON cu.user_id = mu.id
-                WHERE cu.id = w.owner_id
-            )
-            WHEN '用户角色' THEN (
-                SELECT mu.nickname 
-                FROM member_users mu 
-                WHERE mu.id = w.owner_id
-            )
-            WHEN '店铺角色' THEN (
-                SELECT sar.shop_name 
-                FROM shop_auth_records sar 
-                WHERE sar.id = w.owner_id
-            )
-            WHEN '业务员角色' THEN (
-                SELECT mu.nickname 
-                FROM salesmen s 
-                LEFT JOIN member_users mu ON s.user_id = mu.id 
-                WHERE s.id = w.owner_id
-            )
-            WHEN '代理商' THEN (
-                SELECT mu.nickname 
-                FROM agent_infos ai 
-                LEFT JOIN member_users mu ON ai.user_id = mu.id 
-                WHERE ai.id = w.owner_id
-            )
-        END username /* 用户名称 */,
-        w.owner_type /* 提现角色/渠道 */,
-        wwr.amount /* 提现金额 */,
-        wwr.created_at /* 申请时间 */,
-        wwr.withdraw_type /* 提现方式 */,
-        wwr.fee /* 提现手续费 */,
-        wwr.auditor /* 审核人 */,
-        wwr.withdraw_time /* 提现时间 */,
-        wwr.audit_state /* 提现状态 */,
-        wwr.area_code /* 区/县 */,
-        w.available_balance /* 剩余金额 */
-    FROM 
-        wallet_withdraw_records wwr /* 钱包提现记录表 */
-    LEFT JOIN 
-        wallet w ON w.id = wwr.wallet_id /* 钱包表 */
-)
-SELECT 
+/*
+提现管理视图
+*/
+
+DROP VIEW IF EXISTS manage_withdraw;
+
+CREATE OR REPLACE VIEW manage_withdraw AS
+WITH
+    withdraw_detail AS (
+        SELECT
+            wwr.id /* 提现记录ID */,
+            CASE w.owner_type
+                WHEN 4 THEN (
+                    SELECT mu.nickname
+                    FROM
+                        coach_users cu
+                        LEFT JOIN member_users mu ON cu.user_id = mu.id
+                    WHERE
+                        cu.id = w.owner_id
+                )
+                WHEN 3 THEN (
+                    SELECT mu.nickname
+                    FROM member_users mu
+                    WHERE
+                        mu.id = w.owner_id
+                )
+                WHEN 5 THEN (
+                    SELECT sar.shop_name
+                    FROM shop_auth_records sar
+                    WHERE
+                        sar.id = w.owner_id
+                )
+                WHEN 7 THEN (
+                    SELECT mu.nickname
+                    FROM salesmen s
+                        LEFT JOIN member_users mu ON s.user_id = mu.id
+                    WHERE
+                        s.id = w.owner_id
+                )
+                WHEN 6 THEN (
+                    SELECT mu.nickname
+                    FROM
+                        agent_infos ai
+                        LEFT JOIN member_users mu ON ai.user_id = mu.id
+                    WHERE
+                        ai.id = w.owner_id
+                )
+            END username /* 用户名称 */,
+            w.owner_type /* 提现角色/渠道 */,
+            wwr.amount /* 提现金额 */,
+            wwr.created_at /* 申请时间 */,
+            wwr.withdraw_type /* 提现方式 */,
+            wwr.fee /* 提现手续费 */,
+            wwr.auditor /* 审核人 */,
+            wwr.withdraw_time /* 提现时间 */,
+            wwr.audit_state /* 提现状态 */,
+            wwr.area_code /* 区/县 */,
+            w.available_balance /* 剩余金额 */
+        FROM
+            wallet_withdraw_records wwr /* 钱包提现记录表 */
+            LEFT JOIN wallet w ON w.id = wwr.wallet_id /* 钱包表 */
+    )
+SELECT
     username as username /* 用户名称 */,
     owner_type as owner_type /* 提现角色/渠道 */,
     amount as amount /* 提现金额 */,
@@ -83,5 +97,6 @@ SELECT
     audit_state as audit_state /* 提现状态 */,
     area_code as area_code /* 区/县 */,
     available_balance as available_balance /* 剩余金额 */
-FROM 
-    withdraw_detail /* 提现详情临时表 */
+FROM withdraw_detail /* 提现详情临时表 */;
+
+select * from manage_withdraw;

+ 80 - 57
doc/系统设计/数据库设计/物理模型/分析后台设计增加/15平台订单收入.sql

@@ -10,14 +10,14 @@
 接单时间是order表通过id去关联order_records表通过判断state字段的状态为已结单状态获取对应的created_at字段做为接单时间,
 下单时间是order表中的created_at字段,,路费是order表中的traffic_amount字段,
 技师分成、店铺分成、路费、渠道分成、业务员分成、代理商分成、市场经费、平台分成都是通过order表的id去关联wallet_split_records表通过split_type分账类型为师分成、店铺分成、路费、渠道分成、业务员分成、代理商分成、市场经费、平台分成分别对应获取split_amount字段
-
 wallet_split_records表split_type分账类型是:技师分成  业务员分成  代理商分成  市场经费  平台分成   渠道分成  店铺分成
 */
 
 DROP TABLE IF EXISTS report_platform_order_income;
+
 CREATE TABLE report_platform_order_income AS
 /* 使用WITH子句定义多个查询因子 */
-SELECT 
+SELECT
     base.area_code as area_code /* 区域 */,
     base.id as order_id /* 订单编号 */,
     tech_info.coach_name as coach_name /* 技师名称 */,
@@ -36,58 +36,81 @@ SELECT
     split_info.market_amount as market_amount /* 市场经费 */,
     split_info.platform_amount as platform_amount /* 平台分成 */
 FROM (
-    SELECT 
-        ord.id /* 订单编号 */,
-        ord.area_code /* 区域 */,
-        ord.coach_id /* 技师ID */,
-        ord.shop_id /* 店铺ID */,
-        ord.user_id /* 用户ID */,
-        ord.agent_id /* 代理商ID */,
-        ord.total_amount /* 订单金额 */,
-        ord.traffic_amount /* 路费 */,
-        ord.created_at /* 下单时间 */
-    FROM `order` ord /* 订单表 */
-    WHERE ord.deleted_at IS NULL /* 未删除的订单 */
-) base
-LEFT JOIN (
-    SELECT 
-        cu.id /* 技师ID */,
-        mu.nickname coach_name /* 技师名称 */
-    FROM coach_users cu /* 技师表 */
-    LEFT JOIN member_users mu ON cu.user_id = mu.id /* 用户表 */
-) tech_info ON base.coach_id = tech_info.id /* 关联技师信息 */
-LEFT JOIN (
-    SELECT 
-        sar.shop_id /* 店铺ID */,
-        sar.shop_name /* 店铺名称 */
-    FROM shop_auth_records sar /* 店铺认证记录表 */
-) shop_info ON base.shop_id = shop_info.shop_id /* 关联店铺信息 */
-LEFT JOIN member_users muser ON base.user_id = muser.id /* 关联用户信息 */
-LEFT JOIN (
-    SELECT 
-        ai.id /* 代理商ID */,
-        mu.nickname agent_name /* 代理商名称 */
-    FROM agent_infos ai /* 代理商表 */
-    LEFT JOIN member_users mu ON ai.user_id = mu.id /* 用户表 */
-) agent_info ON base.agent_id = agent_info.id /* 关联代理商信息 */
-LEFT JOIN (
-    SELECT 
-        orec.order_id /* 订单ID */,
-        orec.created_at accept_time /* 接单时间 */
-    FROM order_records orec /* 订单记录表 */
-    WHERE orec.state = 'COMPLETED' /* 已完成状态 */
-) accept_time ON base.id = accept_time.order_id /* 关联接单时间 */
-LEFT JOIN (
-    SELECT 
-        ws.order_id /* 订单ID */,
-        MAX(CASE WHEN ws.split_type = 'COACH' THEN ws.split_amount ELSE 0 END) coach_amount /* 技师分成 */,
-        MAX(CASE WHEN ws.split_type = 'SHOP' THEN ws.split_amount ELSE 0 END) shop_amount /* 店铺分成 */,
-        MAX(CASE WHEN ws.split_type = 'CHANNEL' THEN ws.split_amount ELSE 0 END) channel_amount /* 渠道分成 */,
-        MAX(CASE WHEN ws.split_type = 'SALESMAN' THEN ws.split_amount ELSE 0 END) salesman_amount /* 业务员分成 */,
-        MAX(CASE WHEN ws.split_type = 'AGENT' THEN ws.split_amount ELSE 0 END) agent_amount /* 代理商分成 */,
-        MAX(CASE WHEN ws.split_type = 'MARKET' THEN ws.split_amount ELSE 0 END) market_amount /* 市场经费 */,
-        MAX(CASE WHEN ws.split_type = 'PLATFORM' THEN ws.split_amount ELSE 0 END) platform_amount /* 平台分成 */
-    FROM wallet_split_records ws /* 钱包分账记录表 */
-    GROUP BY ws.order_id
-) split_info ON base.id = split_info.order_id /* 关联分账信息 */
-ORDER BY base.created_at DESC /* 按下单时间倒序 */;
+        SELECT ord.id /* 订单编号 */, ord.area_code /* 区域 */, ord.coach_id /* 技师ID */, ord.shop_id /* 店铺ID */, ord.user_id /* 用户ID */, ord.agent_id /* 代理商ID */, ord.total_amount /* 订单金额 */, ord.traffic_amount /* 路费 */, ord.created_at /* 下单时间 */
+        FROM `order` ord /* 订单表 */
+        WHERE
+            ord.deleted_at IS NULL /* 未删除的订单 */
+    ) base
+    LEFT JOIN (
+        SELECT cu.id /* 技师ID */, mu.nickname coach_name /* 技师名称 */
+        FROM
+            coach_users cu /* 技师表 */
+            LEFT JOIN member_users mu ON cu.user_id = mu.id /* 用户表 */
+    ) tech_info ON base.coach_id = tech_info.id /* 关联技师信息 */
+    LEFT JOIN (
+        SELECT sar.shop_id /* 店铺ID */, sar.shop_name /* 店铺名称 */
+        FROM shop_auth_records sar /* 店铺认证记录表 */
+    ) shop_info ON base.shop_id = shop_info.shop_id /* 关联店铺信息 */
+    LEFT JOIN member_users muser ON base.user_id = muser.id /* 关联用户信息 */
+    LEFT JOIN (
+        SELECT ai.id /* 代理商ID */, mu.nickname agent_name /* 代理商名称 */
+        FROM
+            agent_infos ai /* 代理商表 */
+            LEFT JOIN member_users mu ON ai.user_id = mu.id /* 用户表 */
+    ) agent_info ON base.agent_id = agent_info.id /* 关联代理商信息 */
+    LEFT JOIN (
+        SELECT orec.order_id /* 订单ID */, orec.created_at accept_time /* 接单时间 */
+        FROM order_records orec /* 订单记录表 */
+        WHERE
+            orec.state = 'COMPLETED' /* 已完成状态 */
+    ) accept_time ON base.id = accept_time.order_id /* 关联接单时间 */
+    LEFT JOIN (
+        SELECT
+            ws.order_id /* 订单ID */,
+            MAX(
+                CASE
+                    WHEN ws.split_type = 'COACH' THEN ws.split_amount
+                    ELSE 0
+                END
+            ) coach_amount /* 技师分成 */,
+            MAX(
+                CASE
+                    WHEN ws.split_type = 'SHOP' THEN ws.split_amount
+                    ELSE 0
+                END
+            ) shop_amount /* 店铺分成 */,
+            MAX(
+                CASE
+                    WHEN ws.split_type = 'CHANNEL' THEN ws.split_amount
+                    ELSE 0
+                END
+            ) channel_amount /* 渠道分成 */,
+            MAX(
+                CASE
+                    WHEN ws.split_type = 'SALESMAN' THEN ws.split_amount
+                    ELSE 0
+                END
+            ) salesman_amount /* 业务员分成 */,
+            MAX(
+                CASE
+                    WHEN ws.split_type = 'AGENT' THEN ws.split_amount
+                    ELSE 0
+                END
+            ) agent_amount /* 代理商分成 */,
+            MAX(
+                CASE
+                    WHEN ws.split_type = 'MARKET' THEN ws.split_amount
+                    ELSE 0
+                END
+            ) market_amount /* 市场经费 */,
+            MAX(
+                CASE
+                    WHEN ws.split_type = 'PLATFORM' THEN ws.split_amount
+                    ELSE 0
+                END
+            ) platform_amount /* 平台分成 */
+        FROM wallet_split_records ws /* 钱包分账记录表 */
+        GROUP BY
+            ws.order_id
+    ) split_info ON base.id = split_info.order_id /* 关联分账信息 */
+ORDER BY base.created_at DESC /* 按下单时间倒序 */;