Просмотр исходного кода

花卉宝-bug-充值记录总条数都是显示0

ouyang 1 день назад
Родитель
Сommit
c105e64b71

+ 12 - 0
app-mall/controllers/RechargeController.php

@@ -45,6 +45,11 @@ class RechargeController extends BaseController
         util::complete('取消成功');
     }
 
+    /**
+     * 商城充值单列表:分页数据 + 各状态数量(供顶部 Tab 展示)。
+     * 数量字段:all / waitPay(待付款) / recharged(已充值) / cancelled(已取消);
+     * 统计条件与列表同范围,但不带当前 status,避免切 Tab 后其它数量变 0。
+     */
     public function actionList()
     {
         $get = Yii::$app->request->get();
@@ -59,10 +64,17 @@ class RechargeController extends BaseController
             $customId = $hd->customId ?? 0;
             $where['customId'] = $customId;
         }
+        // Tab 数量与列表共用业务范围,统计时去掉 status
+        $countWhere = $where;
         if ($status > -1) {
             $where['status'] = $status;
         }
         $list = \bizMall\recharge\classes\RechargeClass::getRechargeList($where);
+        $statusCounts = \bizMall\recharge\classes\RechargeClass::getStatusCounts($countWhere);
+        $list['all'] = $statusCounts['all'];
+        $list['waitPay'] = $statusCounts['waitPay'];
+        $list['recharged'] = $statusCounts['recharged'];
+        $list['cancelled'] = $statusCounts['cancelled'];
         util::success($list);
     }
 

+ 30 - 0
biz-mall/recharge/classes/RechargeClass.php

@@ -8,6 +8,7 @@ use common\components\imgUtil;
 use common\components\lakala\Lakala;
 use common\components\noticeUtil;
 use common\components\util;
+use yii\db\Expression;
 
 class RechargeClass extends BaseClass
 {
@@ -30,4 +31,33 @@ class RechargeClass extends BaseClass
         return $data;
     }
 
+    /**
+     * 一次聚合查出各状态充值单数量,供商城列表顶部 Tab 展示。
+     * 条件中不要带 status,否则会把其它 Tab 数量算成 0。
+     * status:0 待付款、1 已充值、2 已取消。
+     *
+     * @param array $condition 与列表相同的业务范围(如 mainId、customId)
+     * @return array{all:int,waitPay:int,recharged:int,cancelled:int}
+     */
+    public static function getStatusCounts($condition)
+    {
+        $model = self::getModel();
+        $row = $model->conditionQuery($condition)
+            ->select([
+                'allCnt' => new Expression('COUNT(*)'),
+                'waitPayCnt' => new Expression('SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END)'),
+                'rechargedCnt' => new Expression('SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END)'),
+                'cancelledCnt' => new Expression('SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END)'),
+            ])
+            ->asArray()
+            ->one();
+
+        return [
+            'all' => (int)($row['allCnt'] ?? 0),
+            'waitPay' => (int)($row['waitPayCnt'] ?? 0),
+            'recharged' => (int)($row['rechargedCnt'] ?? 0),
+            'cancelled' => (int)($row['cancelledCnt'] ?? 0),
+        ];
+    }
+
 }