Browse Source

fix:我的佣金

super-yimizi 10 hours ago
parent
commit
bad5443087

+ 364 - 0
application/api/controller/Test.php

@@ -0,0 +1,364 @@
+<?php
+
+namespace app\api\controller;
+
+use app\common\controller\Api;
+use app\common\model\Order as OrderModel;
+use app\common\model\User as UserModel;
+use think\Hook;
+use think\Db;
+
+/**
+ * 测试控制器
+ * 仅用于开发和测试环境
+ */
+class Test extends Api
+{
+    protected $noNeedLogin = [];
+    protected $noNeedRight = ['*'];
+
+    /**
+     * 测试支付后分销事件
+     */
+    public function testOrderPaidEvent()
+    {
+        // 检查是否为开发环境
+        if (config('app_debug') !== true) {
+            $this->error('此接口仅在开发环境下可用');
+        }
+
+        $orderId = $this->request->param('order_id');
+        if (empty($orderId)) {
+            $this->error('请提供订单ID');
+        }
+
+        try {
+            // 查询订单信息
+            $order = OrderModel::with(['items', 'user'])
+                ->where('id', $orderId)
+                ->find();
+
+            if (!$order) {
+                $this->error('订单不存在');
+            }
+
+            // 查询用户信息
+            $user = UserModel::where('id', $order->user_id)->find();
+            if (!$user) {
+                $this->error('用户不存在');
+            }
+
+            // 记录触发前的状态
+            $beforeStats = $this->getCommissionStats($order, $user);
+
+            // 手动触发支付后事件
+            $eventData = [
+                'order' => $order,
+                'user' => $user
+            ];
+
+            Hook::listen('order_paid_after', $eventData);
+
+            // 记录触发后的状态
+            $afterStats = $this->getCommissionStats($order, $user);
+
+            // 构建测试结果
+            $result = [
+                'test_info' => [
+                    'order_id' => $order->id,
+                    'order_sn' => $order->order_sn,
+                    'user_id' => $user->id,
+                    'user_nickname' => $user->nickname,
+                    'event_triggered_time' => date('Y-m-d H:i:s'),
+                    'order_status' => $order->status,
+                    'pay_status' => $order->pay_status,
+                    'total_amount' => $order->total_price,
+                ],
+                'order_items' => $this->formatOrderItems($order->items),
+                'commission_before' => $beforeStats,
+                'commission_after' => $afterStats,
+                'changes' => $this->compareStats($beforeStats, $afterStats),
+                'event_logs' => $this->getRecentCommissionLogs($user->id)
+            ];
+
+            $this->success('支付后事件测试完成', $result);
+
+        } catch (\Exception $e) {
+            $this->error('测试失败: ' . $e->getMessage());
+        }
+    }
+
+    /**
+     * 获取分销统计数据
+     */
+    private function getCommissionStats($order, $user)
+    {
+        // 查询分销订单
+        $commissionOrders = Db::name('commission_order')
+            ->where('order_id', $order->id)
+            ->select();
+
+        // 查询佣金记录
+        $rewards = Db::name('commission_reward')
+            ->alias('r')
+            ->leftJoin('commission_order o', 'r.commission_order_id = o.id')
+            ->where('o.order_id', $order->id)
+            ->field('r.*')
+            ->select();
+
+        // 查询用户分销商信息
+        $agent = Db::name('shop_commission_agent')
+            ->where('user_id', $user->id)
+            ->find();
+
+        // 查询用户的上级关系
+        $parentInfo = null;
+        if ($user->parent_user_id > 0) {
+            $parentUser = UserModel::where('id', $user->parent_user_id)->find();
+            if ($parentUser) {
+                $parentAgent = Db::name('shop_commission_agent')
+                    ->where('user_id', $parentUser->id)
+                    ->find();
+                
+                $parentInfo = [
+                    'parent_user_id' => $parentUser->id,
+                    'parent_nickname' => $parentUser->nickname,
+                    'parent_is_agent' => !empty($parentAgent),
+                    'bind_time' => $user->bind_time ? date('Y-m-d H:i:s', $user->bind_time) : null
+                ];
+            }
+        }
+
+        return [
+            'user_commission' => $user->commission,
+            'agent_info' => $agent ? [
+                'agent_id' => $agent['id'],
+                'agent_type' => $agent['agent_type'],
+                'total_income' => $agent['total_income'],
+                'withdrawn_amount' => $agent['withdrawn_amount'],
+                'child_user_count_all' => $agent['child_user_count_all'],
+                'child_order_money_all' => $agent['child_order_money_all'],
+            ] : null,
+            'parent_info' => $parentInfo,
+            'commission_orders_count' => count($commissionOrders),
+            'commission_orders' => $commissionOrders,
+            'rewards_count' => count($rewards),
+            'rewards' => $rewards,
+            'total_reward_amount' => array_sum(array_column($rewards, 'commission'))
+        ];
+    }
+
+    /**
+     * 格式化订单商品
+     */
+    private function formatOrderItems($items)
+    {
+        $result = [];
+        foreach ($items as $item) {
+            $result[] = [
+                'item_id' => $item->id,
+                'goods_name' => $item->goods_name,
+                'price' => $item->price,
+                'quantity' => $item->quantity,
+                'total_price' => $item->total_price,
+                'is_commission' => isset($item->ext['is_commission']) ? $item->ext['is_commission'] : true,
+                'commission_rate' => $item->ext['commission_rate'] ?? 0,
+            ];
+        }
+        return $result;
+    }
+
+    /**
+     * 比较前后数据变化
+     */
+    private function compareStats($before, $after)
+    {
+        $changes = [];
+
+        // 用户佣金变化
+        if ($before['user_commission'] != $after['user_commission']) {
+            $changes['user_commission'] = [
+                'before' => $before['user_commission'],
+                'after' => $after['user_commission'],
+                'change' => $after['user_commission'] - $before['user_commission']
+            ];
+        }
+
+        // 代理商信息变化
+        if ($before['agent_info'] && $after['agent_info']) {
+            $beforeAgent = $before['agent_info'];
+            $afterAgent = $after['agent_info'];
+
+            if ($beforeAgent['total_income'] != $afterAgent['total_income']) {
+                $changes['agent_total_income'] = [
+                    'before' => $beforeAgent['total_income'],
+                    'after' => $afterAgent['total_income'],
+                    'change' => $afterAgent['total_income'] - $beforeAgent['total_income']
+                ];
+            }
+
+            if ($beforeAgent['child_order_money_all'] != $afterAgent['child_order_money_all']) {
+                $changes['agent_child_order_money'] = [
+                    'before' => $beforeAgent['child_order_money_all'],
+                    'after' => $afterAgent['child_order_money_all'],
+                    'change' => $afterAgent['child_order_money_all'] - $beforeAgent['child_order_money_all']
+                ];
+            }
+        }
+
+        // 分销订单数量变化
+        if ($before['commission_orders_count'] != $after['commission_orders_count']) {
+            $changes['commission_orders_count'] = [
+                'before' => $before['commission_orders_count'],
+                'after' => $after['commission_orders_count'],
+                'change' => $after['commission_orders_count'] - $before['commission_orders_count']
+            ];
+        }
+
+        // 佣金记录数量变化
+        if ($before['rewards_count'] != $after['rewards_count']) {
+            $changes['rewards_count'] = [
+                'before' => $before['rewards_count'],
+                'after' => $after['rewards_count'],
+                'change' => $after['rewards_count'] - $before['rewards_count']
+            ];
+        }
+
+        // 总佣金金额变化
+        if ($before['total_reward_amount'] != $after['total_reward_amount']) {
+            $changes['total_reward_amount'] = [
+                'before' => $before['total_reward_amount'],
+                'after' => $after['total_reward_amount'],
+                'change' => $after['total_reward_amount'] - $before['total_reward_amount']
+            ];
+        }
+
+        return $changes;
+    }
+
+    /**
+     * 获取最近的分销日志
+     */
+    private function getRecentCommissionLogs($userId)
+    {
+        return Db::name('commission_log')
+            ->where('user_id', $userId)
+            ->order('createtime desc')
+            ->limit(5)
+            ->select();
+    }
+
+    /**
+     * 查询订单基本信息(不触发事件)
+     */
+    public function getOrderInfo()
+    {
+        $orderId = $this->request->param('order_id');
+        if (empty($orderId)) {
+            $this->error('请提供订单ID');
+        }
+
+        // 查询订单信息
+        $order = OrderModel::with(['items', 'user'])
+            ->where('id', $orderId)
+            ->find();
+
+        if (!$order) {
+            $this->error('订单不存在');
+        }
+
+        // 查询用户信息
+        $user = UserModel::where('id', $order->user_id)->find();
+
+        // 查询当前分销数据
+        $currentStats = $this->getCommissionStats($order, $user);
+
+        $result = [
+            'order_info' => [
+                'id' => $order->id,
+                'order_sn' => $order->order_sn,
+                'user_id' => $order->user_id,
+                'status' => $order->status,
+                'pay_status' => $order->pay_status,
+                'total_price' => $order->total_price,
+                'pay_time' => $order->pay_time ? date('Y-m-d H:i:s', $order->pay_time) : null,
+                'createtime' => date('Y-m-d H:i:s', $order->createtime),
+            ],
+            'user_info' => [
+                'id' => $user->id,
+                'username' => $user->username,
+                'nickname' => $user->nickname,
+                'mobile' => $user->mobile,
+                'parent_user_id' => $user->parent_user_id,
+                'bind_time' => $user->bind_time ? date('Y-m-d H:i:s', $user->bind_time) : null,
+                'commission' => $user->commission,
+            ],
+            'order_items' => $this->formatOrderItems($order->items),
+            'current_commission_stats' => $currentStats
+        ];
+
+        $this->success('订单信息查询成功', $result);
+    }
+
+    /**
+     * 批量测试多个订单
+     */
+    public function batchTestOrders()
+    {
+        // 检查是否为开发环境
+        if (config('app_debug') !== true) {
+            $this->error('此接口仅在开发环境下可用');
+        }
+
+        $orderIds = $this->request->param('order_ids');
+        if (empty($orderIds) || !is_array($orderIds)) {
+            $this->error('请提供订单ID数组');
+        }
+
+        $results = [];
+        
+        foreach ($orderIds as $orderId) {
+            try {
+                // 查询订单信息
+                $order = OrderModel::with(['items', 'user'])->where('id', $orderId)->find();
+                if (!$order) {
+                    $results[$orderId] = ['error' => '订单不存在'];
+                    continue;
+                }
+
+                $user = UserModel::where('id', $order->user_id)->find();
+                if (!$user) {
+                    $results[$orderId] = ['error' => '用户不存在'];
+                    continue;
+                }
+
+                // 记录触发前状态
+                $beforeStats = $this->getCommissionStats($order, $user);
+
+                // 触发事件
+                Hook::listen('order_paid_after', [
+                    'order' => $order,
+                    'user' => $user
+                ]);
+
+                // 记录触发后状态
+                $afterStats = $this->getCommissionStats($order, $user);
+
+                $results[$orderId] = [
+                    'success' => true,
+                    'order_sn' => $order->order_sn,
+                    'user_nickname' => $user->nickname,
+                    'changes' => $this->compareStats($beforeStats, $afterStats)
+                ];
+
+            } catch (\Exception $e) {
+                $results[$orderId] = ['error' => $e->getMessage()];
+            }
+        }
+
+        $this->success('批量测试完成', [
+            'total_orders' => count($orderIds),
+            'results' => $results
+        ]);
+    }
+}

+ 4 - 2
application/common/Service/Pay/Provider/Wechat.php

@@ -37,8 +37,10 @@ class Wechat extends Base
             }
             }
         }
         }
 
 
-        $order['amount']['total'] = intval(bcmul((string)$order['total_amount'], '100'));        // 按分 为单位
-
+        //$order['amount']['total'] = intval(bcmul((string)$order['total_amount'], '100'));   
+                 // 按分 为单位
+        $order['amount']['total'] = 100;
+        // 测试
         if ($this->platform == 'H5') {
         if ($this->platform == 'H5') {
             $order['_type'] = 'app';        // 使用 配置中的 app_id 字段
             $order['_type'] = 'app';        // 使用 配置中的 app_id 字段
             $order['scene_info'] = [
             $order['scene_info'] = [

+ 16 - 0
application/tags.php

@@ -41,4 +41,20 @@ return [
     'user_share_after' => [
     'user_share_after' => [
         'app\\listeners\\Commission',
         'app\\listeners\\Commission',
     ],
     ],
+    // 订单支付后
+    'order_paid_after' => [
+        'app\\listeners\\Commission',
+    ],
+    // 订单确认收货
+    'order_confirm_finish' => [
+        'app\\listeners\\Commission',
+    ],
+    // 订单完成
+    'order_finish' => [
+        'app\\listeners\\Commission',
+    ],
+    // 订单退款后
+    'order_item_refund_after' => [
+        'app\\listeners\\Commission',
+    ],
 ];
 ];