|
@@ -826,7 +826,7 @@ class AnalyseLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 支付成功率
|
|
|
|
|
|
|
+ // 支付成功率(包含对比数据)
|
|
|
public function getPaySuccessRate($where)
|
|
public function getPaySuccessRate($where)
|
|
|
{
|
|
{
|
|
|
$params = $this->searchByAuth($where);
|
|
$params = $this->searchByAuth($where);
|
|
@@ -834,14 +834,121 @@ class AnalyseLogic extends BaseLogic
|
|
|
$type = $params['type'] ?? 'day';
|
|
$type = $params['type'] ?? 'day';
|
|
|
|
|
|
|
|
if ($type == 'day') {
|
|
if ($type == 'day') {
|
|
|
- return $this->getPaySuccessRateByDay($whereRaw);
|
|
|
|
|
|
|
+ $data = $this->getPaySuccessRateByDay($whereRaw);
|
|
|
|
|
+ // 添加对比数据
|
|
|
|
|
+ $data['comparison'] = $this->getDayComparisonFromPaySuccessRate($params);
|
|
|
|
|
+ return $data;
|
|
|
} elseif ($type == 'week') {
|
|
} elseif ($type == 'week') {
|
|
|
- return $this->getPaySuccessRateByWeek($whereRaw);
|
|
|
|
|
|
|
+ $data = $this->getPaySuccessRateByWeek($whereRaw);
|
|
|
|
|
+ // 添加对比数据
|
|
|
|
|
+ $data['comparison'] = $this->getWeekComparisonFromPaySuccessRate($params);
|
|
|
|
|
+ return $data;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return [];
|
|
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昨天,按小时分组)
|
|
* 按天对比支付成功率(今天vs昨天,按小时分组)
|
|
|
*/
|
|
*/
|
|
@@ -1082,6 +1189,43 @@ class AnalyseLogic extends BaseLogic
|
|
|
return $change;
|
|
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轴数据
|
|
* 生成小时X轴数据
|
|
|
*/
|
|
*/
|