ith5 2 ay önce
ebeveyn
işleme
86e1864cc1

+ 1 - 0
app/v1/controller/dataReport/AnalyseController.php

@@ -132,4 +132,5 @@ class AnalyseController extends BaseController
         $data = $this->logic->getPaySuccessRate($where);
         return $this->success($data);
     }
+
 }

+ 147 - 3
app/v1/logic/dataReport/AnalyseLogic.php

@@ -826,7 +826,7 @@ class AnalyseLogic extends BaseLogic
         }
     }
 
-    // 支付成功率
+    // 支付成功率(包含对比数据)
     public function getPaySuccessRate($where)
     {
         $params = $this->searchByAuth($where);
@@ -834,14 +834,121 @@ class AnalyseLogic extends BaseLogic
         $type = $params['type'] ?? 'day';
 
         if ($type == 'day') {
-            return $this->getPaySuccessRateByDay($whereRaw);
+            $data = $this->getPaySuccessRateByDay($whereRaw);
+            // 添加对比数据
+            $data['comparison'] = $this->getDayComparisonFromPaySuccessRate($params);
+            return $data;
         } elseif ($type == 'week') {
-            return $this->getPaySuccessRateByWeek($whereRaw);
+            $data = $this->getPaySuccessRateByWeek($whereRaw);
+            // 添加对比数据
+            $data['comparison'] = $this->getWeekComparisonFromPaySuccessRate($params);
+            return $data;
         }
 
         return [];
     }
 
+
+    /**
+     * 从支付成功率接口获取日对比数据(今日vs昨日)
+     */
+    private function getDayComparisonFromPaySuccessRate($params)
+    {
+        // 复用支付成功率接口的数据
+        $paySuccessData = $this->getPaySuccessRateByDay($this->getCommonWhereRaw($params));
+        
+        // 从支付成功率数据中提取今日和昨日的数据
+        $todayOrderNum = $paySuccessData['orderNum'];
+        $todayPayNum = $paySuccessData['successNum'];
+        $todayPaySuccessRate = $paySuccessData['paySuccessRate'];
+        
+        // 计算昨日数据(从表格数据中获取)
+        $tableData = $paySuccessData['data'];
+        $yesterdayOrderNum = 0;
+        $yesterdayPayNum = 0;
+        foreach ($tableData as $row) {
+            $yesterdayOrderNum += $row['yesterdayOrderNum'];
+            $yesterdayPayNum += $row['yesterdayPayNum'];
+        }
+        $yesterdayPaySuccessRate = $yesterdayOrderNum > 0 ? getRound($yesterdayPayNum, $yesterdayOrderNum) : 0;
+
+        // 计算变化百分比和趋势
+        $orderChange = $this->calculateChangePercentage($todayOrderNum, $yesterdayOrderNum);
+        $payChange = $this->calculateChangePercentage($todayPayNum, $yesterdayPayNum);
+        $rateChange = $this->calculateChangePercentage($todayPaySuccessRate, $yesterdayPaySuccessRate);
+
+        return [
+            'type' => 'day',
+            'current' => [
+                'orderNum' => $todayOrderNum,
+                'payNum' => $todayPayNum,
+                'paySuccessRate' => $todayPaySuccessRate,
+                'label' => '今日'
+            ],
+            'previous' => [
+                'orderNum' => $yesterdayOrderNum,
+                'payNum' => $yesterdayPayNum,
+                'paySuccessRate' => $yesterdayPaySuccessRate,
+                'label' => '昨日'
+            ],
+            'changes' => [
+                'orderChange' => array_merge($orderChange, ['label' => '较昨日']),
+                'payChange' => array_merge($payChange, ['label' => '较昨日']),
+                'rateChange' => array_merge($rateChange, ['label' => '较昨日'])
+            ]
+        ];
+    }
+
+    /**
+     * 从支付成功率接口获取周对比数据(本周vs上周)
+     */
+    private function getWeekComparisonFromPaySuccessRate($params)
+    {
+        // 复用支付成功率接口的数据
+        $paySuccessData = $this->getPaySuccessRateByWeek($this->getCommonWhereRaw($params));
+        
+        // 从支付成功率数据中提取本周和上周的数据
+        $thisWeekOrderNum = $paySuccessData['orderNum'];
+        $thisWeekPayNum = $paySuccessData['successNum'];
+        $thisWeekPaySuccessRate = $paySuccessData['paySuccessRate'];
+        
+        // 计算上周数据(从表格数据中获取)
+        $tableData = $paySuccessData['data'];
+        $lastWeekOrderNum = 0;
+        $lastWeekPayNum = 0;
+        foreach ($tableData as $row) {
+            $lastWeekOrderNum += $row['yesterdayOrderNum'];
+            $lastWeekPayNum += $row['yesterdayPayNum'];
+        }
+        $lastWeekPaySuccessRate = $lastWeekOrderNum > 0 ? getRound($lastWeekPayNum, $lastWeekOrderNum) : 0;
+
+        // 计算变化百分比和趋势
+        $orderChange = $this->calculateChangePercentage($thisWeekOrderNum, $lastWeekOrderNum);
+        $payChange = $this->calculateChangePercentage($thisWeekPayNum, $lastWeekPayNum);
+        $rateChange = $this->calculateChangePercentage($thisWeekPaySuccessRate, $lastWeekPaySuccessRate);
+
+        return [
+            'type' => 'week',
+            'current' => [
+                'orderNum' => $thisWeekOrderNum,
+                'payNum' => $thisWeekPayNum,
+                'paySuccessRate' => $thisWeekPaySuccessRate,
+                'label' => '本周'
+            ],
+            'previous' => [
+                'orderNum' => $lastWeekOrderNum,
+                'payNum' => $lastWeekPayNum,
+                'paySuccessRate' => $lastWeekPaySuccessRate,
+                'label' => '上周'
+            ],
+            'changes' => [
+                'orderChange' => array_merge($orderChange, ['label' => '较上周']),
+                'payChange' => array_merge($payChange, ['label' => '较上周']),
+                'rateChange' => array_merge($rateChange, ['label' => '较上周'])
+            ]
+        ];
+    }
+
     /**
      * 按天对比支付成功率(今天vs昨天,按小时分组)
      */
@@ -1082,6 +1189,43 @@ class AnalyseLogic extends BaseLogic
         return $change;
     }
 
+    /**
+     * 计算变化百分比和趋势
+     */
+    private function calculateChangePercentage($currentValue, $previousValue)
+    {
+        if ($previousValue == 0) {
+            $trend = $currentValue > 0 ? 'up' : 'stable';
+            $percentage = $currentValue > 0 ? 100 : 0;
+            return [
+                'percentage' => $percentage,
+                'percentageText' => $percentage . '%',
+                'trend' => $trend,
+                'value' => $currentValue - $previousValue,
+                'icon' => $trend == 'up' ? 'icon-arrow-rise' : 'icon-arrow-stable'
+            ];
+        }
+        
+        $percentage = round((($currentValue - $previousValue) / $previousValue) * 100, 2);
+        $trend = $percentage > 0 ? 'up' : ($percentage < 0 ? 'down' : 'stable');
+        
+        // 根据趋势设置图标
+        $icon = 'icon-arrow-stable';
+        if ($trend == 'up') {
+            $icon = 'icon-arrow-rise';
+        } elseif ($trend == 'down') {
+            $icon = 'icon-arrow-fall';
+        }
+        
+        return [
+            'percentage' => abs($percentage),
+            'percentageText' => abs($percentage) . '%',
+            'trend' => $trend,
+            'value' => $currentValue - $previousValue,
+            'icon' => $icon
+        ];
+    }
+
     /**
      * 生成小时X轴数据
      */