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

Merge branch 'master' into dev

shish 4 дней назад
Родитель
Сommit
ab63d192c3

+ 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),
+        ];
+    }
+
 }

+ 37 - 1
common/components/deliverySlipPrintUtil.php

@@ -4,6 +4,7 @@ namespace common\components;
 
 use biz\shop\classes\ShopClass;
 use bizHd\order\classes\OrderGoodsClass;
+use bizHd\order\classes\PsMethodClass;
 use bizHd\order\services\OrderService;
 use Yii;
 
@@ -71,7 +72,12 @@ class deliverySlipPrintUtil
             $addressBlock .= ' 配送距离: ' . $data['distanceText'];
         }
         $data['addressBlock'] = $addressBlock;
-        $data['reachTimeText'] = trim(($data['reachDateLabel'] ?? '') . ' ' . ($data['reachDateTime'] ?? ''));
+        // 配送时间后接「/配送方式:具体方式」,斜杠与冒号固定,便于与时间区分
+        $reachTimeText = trim(($data['reachDateLabel'] ?? '') . ' ' . ($data['reachDateTime'] ?? ''));
+        if (!empty($data['sendTypeName'])) {
+            $reachTimeText = trim($reachTimeText) . ' / 配送方式:' . $data['sendTypeName'];
+        }
+        $data['reachTimeText'] = $reachTimeText;
         $data['productCountText'] = '共 ' . ($data['productCount'] ?? '1') . ' 个';
         $data['serviceTip'] = '';
         if (!empty($data['servicePhone'])) {
@@ -164,6 +170,7 @@ class deliverySlipPrintUtil
         // 云打印默认转 data URI;本机 hiprint 传 URL 即可
         $imageAsDataUri = !isset($options['imageAsDataUri']) || $options['imageAsDataUri'];
         $productImage = $imageAsDataUri ? self::imageToDataUri($cover) : $cover;
+        $sendTypeName = self::resolveSendTypeName($order);
 
         return [
             'title' => $shopName . ' 鲜花配送单',
@@ -175,6 +182,7 @@ class deliverySlipPrintUtil
             'distanceText' => $distanceText,
             'reachDateLabel' => $reachDateLabel,
             'reachDateTime' => $reachDateTime,
+            'sendTypeName' => $sendTypeName,
             'productName' => $productName,
             'productCount' => (string)$goodsNum,
             'productImage' => $productImage,
@@ -186,6 +194,34 @@ class deliverySlipPrintUtil
         ];
     }
 
+    /**
+     * 解析配送方式展示名:优先门店 xhPsMethod 别名,否则与订单列表文案一致
+     * @param array $order 订单
+     * @return string
+     */
+    protected static function resolveSendTypeName(array $order)
+    {
+        $style = intval($order['sendType'] ?? -1);
+        $defaults = [
+            0 => '送货上门',
+            1 => '到店自取',
+            2 => '跑腿送货',
+            3 => '发物流',
+            4 => '发快递',
+        ];
+        if ($style < 0 || $style > 4) {
+            return '';
+        }
+        $mainId = intval($order['mainId'] ?? 0);
+        if ($mainId > 0) {
+            $config = PsMethodClass::getByCondition(['mainId' => $mainId, 'style' => $style]);
+            if (!empty($config['name'])) {
+                return (string)$config['name'];
+            }
+        }
+        return $defaults[$style];
+    }
+
     /**
      * 渲染 A4 HTML
      */

+ 1 - 1
common/templates/delivery-slip-a4-hiprint.json

@@ -233,7 +233,7 @@
             "width": 410,
             "title": "时间",
             "field": "reachTimeText",
-            "testData": "预约配送 03月15日 下午",
+            "testData": "预约配送 03月15日 下午 / 配送方式:跑腿送货",
             "fontSize": 21,
             "fontWeight": "bold",
             "textAlign": "left",

+ 3 - 0
common/templates/delivery-slip-a4.php

@@ -198,6 +198,9 @@ $paper = $data['paper'] ?? [
                         <td colspan="3">
                             <strong><?= $escape($data['reachDateLabel'] ?? '') ?></strong>
                             <strong><?= $escape($data['reachDateTime'] ?? '') ?></strong>
+                            <?php if (!empty($data['sendTypeName'])): ?>
+                            <strong> / 配送方式:<?= $escape($data['sendTypeName']) ?></strong>
+                            <?php endif; ?>
                         </td>
                     </tr>
                     <tr>