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

Merge branch 'master' into dev

shish 1 день назад
Родитель
Сommit
3399c42b5a

+ 3 - 1
app-ghs/controllers/ExpendController.php

@@ -41,7 +41,8 @@ class ExpendController extends BaseController
         $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'pay';
         $timeField = ($timeType === 'send') ? 'sendTime' : 'payTime';
         $where[$timeField] = ['between', [$currentStartTime, $currentEndTime]];
-        $where['delStatus'] = 0; //过滤掉已删除的
+        // 未删除才计入;sendTime 不代表单据有效,发货/发生口径同样必须带 delStatus=0
+        $where['delStatus'] = 0;
         $list = ExpendClass::getAllByCondition($where, null, '*', null);
         $arr = [];
         $cat = [];
@@ -210,6 +211,7 @@ class ExpendController extends BaseController
         if ($bx != -1) {
             $where['bx'] = $bx;
         }
+        // 未删除才列出;按 sendTime 筛时同样必须带,sendTime 不代表单据有效
         $where['delStatus'] = 0;
         $searchTime = isset($get['searchTime']) && !empty($get['searchTime']) ? $get['searchTime'] : 'thisYear';
         $startTime = $get['startTime'] ?? '';

+ 20 - 4
app-ghs/controllers/OrderController.php

@@ -3078,7 +3078,8 @@ class OrderController extends BaseController
     }
 
     /**
-     * 应收统计:按支付日汇总。
+     * 应收统计:按记账日或发货日汇总。
+     * timeType=bill(默认)筛 payTime;send 筛 sendTime,且只统计已付款。
      * originAmount=未扣隔天;nextDayAmount=跨天售后;amount=已扣隔天(净额)。
      */
     public function actionAccountList()
@@ -3104,7 +3105,14 @@ class OrderController extends BaseController
         if ($debt > -1) {
             $where['debt'] = $debt;
         }
-        $where['payTime'] = ['between', [$currentStartTime, $currentEndTime]];
+        // timeType=bill(默认记账 payTime)/ send(发货 sendTime)
+        $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
+        $saleTimeField = ($timeType === 'send') ? 'sendTime' : 'payTime';
+        $where[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款
+        if ($timeType === 'send') {
+            $where['payStatus'] = 1;
+        }
         $orderList = OrderClass::getAllByCondition($where, null, '*');
         $list = [];
         $totalOriginAmount = 0;
@@ -3228,7 +3236,8 @@ class OrderController extends BaseController
 
 
     /**
-     * 客户业绩(PC):按支付日汇总开单;跨天售后按通过日扣实际金额并计入退款。
+     * 客户业绩(PC):按记账日或发货日汇总开单;跨天售后按通过日扣实际金额并计入退款。
+     * timeType=bill(默认)筛 payTime;send 筛 sendTime,且只统计已付款。
      * 与小程序 statCustomCg 同步,搜索关键词 customYj。
      */
     public function actionYj()
@@ -3254,7 +3263,14 @@ class OrderController extends BaseController
         if ($debt > -1) {
             $where['debt'] = $debt;
         }
-        $where['payTime'] = ['between', [$currentStartTime, $currentEndTime]];
+        // timeType=bill(默认记账 payTime)/ send(发货 sendTime)
+        $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
+        $saleTimeField = ($timeType === 'send') ? 'sendTime' : 'payTime';
+        $where[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款
+        if ($timeType === 'send') {
+            $where['payStatus'] = 1;
+        }
         $orderList = OrderClass::getAllByCondition($where, null, '*');
         $list = [];
         $totalActPrice = 0;

+ 6 - 2
app-ghs/controllers/PurchaseOrderController.php

@@ -958,7 +958,8 @@ class PurchaseOrderController extends BaseController
     }
 
     /**
-     * 应付统计:按入库日汇总。
+     * 应付统计:按记账日或发货日汇总。
+     * timeType=bill(默认)筛 entryTime;send 筛 sendTime(仍只统计已入库 status=4)。
      * originAmount=未扣隔天;nextDayAmount=跨天售后;amount=已扣隔天(净额)。
      */
     public function actionDueList()
@@ -983,7 +984,10 @@ class PurchaseOrderController extends BaseController
         if ($debt > 0) {
             $cgWhere['debt'] = $debt;
         }
-        $cgWhere['entryTime'] = ['between', [$currentStartTime, $currentEndTime]];
+        // timeType=bill(默认记账 entryTime)/ send(发货 sendTime)
+        $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
+        $cgTimeField = ($timeType === 'send') ? 'sendTime' : 'entryTime';
+        $cgWhere[$cgTimeField] = ['between', [$currentStartTime, $currentEndTime]];
         $cgList = PurchaseOrderClass::getAllByCondition($cgWhere, null, '*');
         $list = [];
         $totalOriginAmount = 0;

+ 4 - 0
app-ghs/controllers/StatCgGhsController.php

@@ -47,6 +47,10 @@ class StatCgGhsController extends BaseController
         $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
         $cgTimeField = ($timeType === 'send') ? 'sendTime' : 'entryTime';
         $where[$cgTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表已入库,发货口径只统计已完成采购单
+        if ($timeType === 'send') {
+            $where['status'] = 4;
+        }
         $orderList = PurchaseOrderClass::getAllByCondition($where, null, '*');
         $list = [];
         $totalActPrice = 0;

+ 1 - 1
app-ghs/controllers/StatController.php

@@ -30,7 +30,7 @@ class StatController extends BaseController
             $period = dateUtil::formatTime($searchTime, $startTime, $endTime, true);
             $start = date("Y-m-d 00:00:00", strtotime($period['startTime']));
             $end = date("Y-m-d 23:59:59", strtotime($period['endTime']));
-            // timeType=bill(默认记账 entryTime)/ send(发货 sendTime)
+            // timeType=bill(默认记账 entryTime)/ send(发货 sendTime);上方 status=4,发货口径同样只统计已入库
             $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
             $cgTimeField = ($timeType === 'send') ? 'sendTime' : 'entryTime';
             $where[$cgTimeField] = ['between', [$start, $end]];

+ 4 - 0
app-ghs/controllers/StatItemController.php

@@ -70,6 +70,10 @@ class StatItemController extends BaseController
         $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
         $saleTimeField = ($timeType === 'send') ? 'sendTime' : 'payTime';
         $where[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款(xhGhsOrder.payStatus=1)
+        if ($timeType === 'send') {
+            $where['payStatus'] = 1;
+        }
         // includeNextDay=1(默认)计入跨天售后通过日扣减;=0 不含售后历史
         $includeNextDay = !isset($get['includeNextDay']) || intval($get['includeNextDay']) === 1;
 

+ 6 - 2
biz-ghs/order/classes/OrderClass.php

@@ -2959,7 +2959,9 @@ XL;
                 $objPHPExcel->getActiveSheet()->getStyle($col . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             }
         }
-        $fileName = '应收统计-' . date("m-d");
+        // 文件名带上记账/发货口径,和页面「导出记账时间」对齐
+        $timeTypeName = Yii::$app->request->get('timeType') === 'send' ? '发货时间' : '记账时间';
+        $fileName = '应收统计-' . $timeTypeName . '-' . date("m-d");
         $objPHPExcel->getActiveSheet()->setTitle($fileName);
         $objPHPExcel->setActiveSheetIndex(0);
         $dir = './priceTable/' . $mainId;
@@ -3142,7 +3144,9 @@ XL;
             $objPHPExcel->getActiveSheet()->getStyle('I' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $objPHPExcel->getActiveSheet()->getStyle('J' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
         }
-        $fileName = '客户业绩-' . date("m-d");
+        // 文件名带上记账/发货口径,和页面「导出记账时间」对齐
+        $timeTypeName = Yii::$app->request->get('timeType') === 'send' ? '发货时间' : '记账时间';
+        $fileName = '客户业绩-' . $timeTypeName . '-' . date("m-d");
         $objPHPExcel->getActiveSheet()->setTitle($fileName);
         $objPHPExcel->setActiveSheetIndex(0);
         $dir = './priceTable/' . $mainId;

+ 3 - 1
biz-ghs/order/classes/PurchaseOrderClass.php

@@ -2008,7 +2008,9 @@ class PurchaseOrderClass extends BaseClass
                 $objPHPExcel->getActiveSheet()->getStyle($col . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
             }
         }
-        $fileName = '应付统计-' . date("m-d");
+        // 文件名带上记账/发货口径,和页面「导出记账时间」对齐
+        $timeTypeName = Yii::$app->request->get('timeType') === 'send' ? '发货时间' : '记账时间';
+        $fileName = '应付统计-' . $timeTypeName . '-' . date("m-d");
         $objPHPExcel->getActiveSheet()->setTitle($fileName);
         $objPHPExcel->setActiveSheetIndex(0);
         $dir = './priceTable/' . $mainId;

+ 5 - 1
biz-ghs/stat/classes/StatCgClass.php

@@ -51,6 +51,7 @@ class StatCgClass extends BaseClass
         $productInfo = ProductClass::getAllByCondition(['mainId' => $mainId], null, 'id,name,py', 'id');
 
         // timeType=bill(默认记账 entryTime)/ send(发货 sendTime)
+        // status=4 已入库;发货口径也必须带,因为 sendTime 不代表已入库
         $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
         $cgTimeField = ($timeType === 'send') ? 'sendTime' : 'entryTime';
 
@@ -227,7 +228,9 @@ class StatCgClass extends BaseClass
             $objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
             $objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
         }
-        $fileName = '采购花材-' . date("m-d");
+        // 文件名带上记账/发货口径,和页面「导出记账时间」对齐
+        $timeTypeName = Yii::$app->request->get('timeType') === 'send' ? '发货时间' : '记账时间';
+        $fileName = '采购花材-' . $timeTypeName . '-' . date("m-d");
         $objPHPExcel->getActiveSheet()->setTitle($fileName);
         $objPHPExcel->setActiveSheetIndex(0);
         $dir = './priceTable/' . $mainId;
@@ -270,6 +273,7 @@ class StatCgClass extends BaseClass
         $currentEndTime = $currentEndDate . ' 23:59:59';
 
         // timeType=bill(默认记账 entryTime)/ send(发货 sendTime)
+        // status=4 已入库;发货口径也必须带,因为 sendTime 不代表已入库
         $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
         $cgTimeField = ($timeType === 'send') ? 'sendTime' : 'entryTime';
 

+ 8 - 0
biz-ghs/stat/classes/StatKdClass.php

@@ -170,6 +170,10 @@ class StatKdClass extends BaseClass
         //批发开单
         $where = ['mainId' => $mainId, 'status' => ['in', [OrderClass::ORDER_STATUS_UN_SEND, OrderClass::ORDER_STATUS_SENDING, OrderClass::ORDER_STATUS_COMPLETE]]];
         $where[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款
+        if ($timeType === 'send') {
+            $where['payStatus'] = 1;
+        }
 
         $ghsOrderList = OrderClass::getAllByCondition($where, null, '*');
         if (!empty($ghsOrderList)) {
@@ -284,6 +288,10 @@ class StatKdClass extends BaseClass
         $lsAfterSale = 0;
         $hdWhere = ['mainId' => $mainId, 'status' => ['in', [HdOrderClass::ORDER_STATUS_UN_SEND, HdOrderClass::ORDER_STATUS_SENDING, HdOrderClass::ORDER_STATUS_COMPLETE]]];
         $hdWhere[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款(xhOrder.payStatus=1)
+        if ($timeType === 'send') {
+            $hdWhere['payStatus'] = 1;
+        }
         $hdOrderList = HdOrderClass::getAllByCondition($hdWhere, null, '*');
         foreach ($hdOrderList as $hdKey => $hdOrder) {
             $payWay = $hdOrder['payWay'] ?? 0;

+ 40 - 5
biz-ghs/stat/classes/StatSaleClass.php

@@ -146,6 +146,10 @@ class StatSaleClass extends BaseClass
 
         $where = ['mainId' => $mainId, 'status' => ['in', [OrderClass::ORDER_STATUS_UN_SEND, OrderClass::ORDER_STATUS_SENDING, OrderClass::ORDER_STATUS_COMPLETE]]];
         $where[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款
+        if ($timeType === 'send') {
+            $where['payStatus'] = 1;
+        }
 
         $customList = CustomClass::getAllByCondition(['ownMainId' => $mainId], null, 'id,name,py', 'id');
 
@@ -260,6 +264,8 @@ class StatSaleClass extends BaseClass
      * 采购跨天售后:不改「花材采购」入库口径;通过日单独「采购隔天退货」(退货并退款+仅退款合计)计入收入。
      * timeType=bill(默认):销售按 payTime、采购按 entryTime、支出按 payTime;
      * timeType=send:销售/采购/支出均按 sendTime。
+     * 发货口径须补成功态:xhGhsOrder/xhOrder 加 payStatus=1,xhGhsCgOrder 加 status=4,xhExpend 加 delStatus=0
+     * (sendTime 开单即可写入,不代表成交;payTime/entryTime 本身即成功时间)。
      * 仅切换 xhGhsOrder / xhOrder / xhGhsCgOrder / xhExpend,其它统计项时间字段不变。
      */
     public static function profile($mainId)
@@ -297,7 +303,7 @@ class StatSaleClass extends BaseClass
         //出库
         $stockOut = StatStockOutClass::getSum($where);
 
-        //采购入库(xhGhsCgOrder)
+        //采购入库(xhGhsCgOrder):status=4 已入库;发货口径也必须带,因为 sendTime 不代表已入库
         $cgWhere = ['mainId' => $mainId, 'status' => 4];
         $cgWhere[$cgTimeField] = ['between', [$currentStartTime, $currentEndTime]];
         $cgList = PurchaseOrderClass::getAllByCondition($cgWhere, null, '*');
@@ -366,6 +372,10 @@ class StatSaleClass extends BaseClass
         $pfPack = 0;
         $where = ['mainId' => $mainId, 'status' => ['in', [OrderClass::ORDER_STATUS_UN_SEND, OrderClass::ORDER_STATUS_SENDING, OrderClass::ORDER_STATUS_COMPLETE]]];
         $where[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款
+        if ($useSendTime) {
+            $where['payStatus'] = 1;
+        }
 
         $ghsOrderList = OrderClass::getAllByCondition($where, null, '*');
         if (!empty($ghsOrderList)) {
@@ -406,6 +416,10 @@ class StatSaleClass extends BaseClass
         $lsServiceFee = 0;
         $hdWhere = ['mainId' => $mainId, 'status' => ['in', [HdOrderClass::ORDER_STATUS_UN_SEND, HdOrderClass::ORDER_STATUS_SENDING, HdOrderClass::ORDER_STATUS_COMPLETE]]];
         $hdWhere[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款(xhOrder.payStatus=1)
+        if ($useSendTime) {
+            $hdWhere['payStatus'] = 1;
+        }
         $hdOrderList = HdOrderClass::getAllByCondition($hdWhere, null, '*');
         foreach ($hdOrderList as $hdKey => $hdOrder) {
             $actPrice = $hdOrder['mainPay'] ?? 0;
@@ -454,6 +468,7 @@ class StatSaleClass extends BaseClass
             }
         }
 
+        // 支出:delStatus=0 未删除;发货口径也必须带,因为 sendTime 不代表单据有效
         $condition = [
             'mainId' => $mainId,
             $expendTimeField => ['between', [$currentStartTime, $currentEndTime]],
@@ -887,6 +902,7 @@ class StatSaleClass extends BaseClass
         }
 
         // timeType=bill:销售 payTime、采购 entryTime;send:均按 sendTime
+        // 发货口径销售须补 payStatus=1、采购须 status=4(sendTime 不代表成交/入库)
         $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
         $useSendTime = ($timeType === 'send');
         $saleTimeField = $useSendTime ? 'sendTime' : 'payTime';
@@ -905,7 +921,7 @@ class StatSaleClass extends BaseClass
         $totalDiscountAmount = 0;
         $totalLabourCost = 0;
 
-        //采购入库
+        //采购入库:status=4 已入库;发货口径也必须带,sendTime 不代表已入库
         $tbCgIncome = [];
         $tbCgIncomeStaff = [];
         $cgWhere = ['mainId' => $mainId, 'status' => 4];
@@ -1051,6 +1067,10 @@ class StatSaleClass extends BaseClass
         $tbSaleIncomeStaff = [];
         $where = ['mainId' => $mainId, 'status' => ['in', [OrderClass::ORDER_STATUS_UN_SEND, OrderClass::ORDER_STATUS_SENDING, OrderClass::ORDER_STATUS_COMPLETE]]];
         $where[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款
+        if ($useSendTime) {
+            $where['payStatus'] = 1;
+        }
         $ghsOrderList = OrderClass::getAllByCondition($where, null, '*');
         if (!empty($ghsOrderList)) {
             foreach ($ghsOrderList as $ghsKey => $ghsOrder) {
@@ -1180,6 +1200,10 @@ class StatSaleClass extends BaseClass
         $lsIncome = 0;
         $hdWhere = ['mainId' => $mainId, 'status' => ['in', [HdOrderClass::ORDER_STATUS_UN_SEND, HdOrderClass::ORDER_STATUS_SENDING, HdOrderClass::ORDER_STATUS_COMPLETE]]];
         $hdWhere[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款(xhOrder.payStatus=1)
+        if ($useSendTime) {
+            $hdWhere['payStatus'] = 1;
+        }
         $hdOrderList = HdOrderClass::getAllByCondition($hdWhere, null, '*');
         foreach ($hdOrderList as $hdKey => $hdOrder) {
             $actPrice = $hdOrder['mainPay'] ?? 0;
@@ -1362,7 +1386,9 @@ class StatSaleClass extends BaseClass
             $objPHPExcel->getActiveSheet()->getStyle('E' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
             $objPHPExcel->getActiveSheet()->getStyle('F' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
         }
-        $fileName = '收支花材-' . date("m-d");
+        // 文件名带上记账/发货口径,和页面「导出记账时间」对齐
+        $timeTypeName = Yii::$app->request->get('timeType') === 'send' ? '发货时间' : '记账时间';
+        $fileName = '收支花材-' . $timeTypeName . '-' . date("m-d");
         $objPHPExcel->getActiveSheet()->setTitle($fileName);
         $objPHPExcel->setActiveSheetIndex(0);
         $dir = './priceTable/' . $mainId;
@@ -1453,7 +1479,9 @@ class StatSaleClass extends BaseClass
             $objPHPExcel->getActiveSheet()->getStyle('E' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $objPHPExcel->getActiveSheet()->getStyle('F' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
         }
-        $fileName = '收支分类-' . time();
+        // 文件名带上记账/发货口径,和页面「导出记账时间」对齐
+        $timeTypeName = Yii::$app->request->get('timeType') === 'send' ? '发货时间' : '记账时间';
+        $fileName = '收支分类-' . $timeTypeName . '-' . time();
         $objPHPExcel->getActiveSheet()->setTitle($fileName);
         $objPHPExcel->setActiveSheetIndex(0);
         $dir = './priceTable/' . $mainId;
@@ -1536,7 +1564,10 @@ class StatSaleClass extends BaseClass
             $objPHPExcel->getActiveSheet()->getStyle('D' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
             $objPHPExcel->getActiveSheet()->getStyle('E' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
         }
-        $fileName = '花材销量-' . date("m-d");
+        // 文件名带上记账/发货 + 是否含售后历史,避免下载后分不清口径
+        $timeTypeName = Yii::$app->request->get('timeType') === 'send' ? '发货时间' : '记账时间';
+        $afterSaleName = ((int)Yii::$app->request->get('includeNextDay', 1) === 1) ? '含售后历史' : '不含售后历史';
+        $fileName = '花材销量-' . $timeTypeName . '-' . $afterSaleName . '-' . date("m-d");
         $objPHPExcel->getActiveSheet()->setTitle($fileName);
         $objPHPExcel->setActiveSheetIndex(0);
         $dir = './priceTable/' . $mainId;
@@ -1659,6 +1690,10 @@ class StatSaleClass extends BaseClass
 
         $where = ['mainId' => $mainId, 'status' => ['in', [OrderClass::ORDER_STATUS_UN_SEND, OrderClass::ORDER_STATUS_SENDING, OrderClass::ORDER_STATUS_COMPLETE]]];
         $where[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款
+        if ($timeType === 'send') {
+            $where['payStatus'] = 1;
+        }
 
         $customList = CustomClass::getAllByCondition(['ownMainId' => $mainId], null, 'id,name,distId', 'id');
 

+ 9 - 0
biz-ghs/stat/classes/StatYjClass.php

@@ -37,12 +37,17 @@ class StatYjClass extends BaseClass
         $arr = [];
 
         // timeType=bill(默认记账 payTime)/ send(发货 sendTime)
+        // 发货口径须补 payStatus=1:sendTime 不代表成交
         $timeType = isset($get['timeType']) ? strval($get['timeType']) : 'bill';
         $saleTimeField = ($timeType === 'send') ? 'sendTime' : 'payTime';
 
         //批发开单
         $where = ['mainId' => $mainId];
         $where[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款
+        if ($timeType === 'send') {
+            $where['payStatus'] = 1;
+        }
         $ghsOrderList = OrderClass::getAllByCondition($where, null, '*');
         if (!empty($ghsOrderList)) {
             foreach ($ghsOrderList as $ghsKey => $ghsOrder) {
@@ -68,6 +73,10 @@ class StatYjClass extends BaseClass
 
         $hdWhere = ['mainId' => $mainId];
         $hdWhere[$saleTimeField] = ['between', [$currentStartTime, $currentEndTime]];
+        // sendTime 不代表成交,发货口径只统计已确认付款(xhOrder.payStatus=1)
+        if ($timeType === 'send') {
+            $hdWhere['payStatus'] = 1;
+        }
         $hdOrderList = \bizHd\order\classes\OrderClass::getAllByCondition($hdWhere, null, '*');
         if (!empty($hdOrderList)) {
             foreach ($hdOrderList as $hdKey => $hdOrder) {

+ 3 - 1
biz/stat/classes/StatCgGhsClass.php

@@ -184,7 +184,9 @@ class StatCgGhsClass extends BaseClass
             $objPHPExcel->getActiveSheet()->getStyle('I' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $objPHPExcel->getActiveSheet()->getStyle('J' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
         }
-        $fileName = '供货商业绩-' . date("m-d");
+        // 文件名带上记账/发货口径,和页面「导出记账时间」对齐
+        $timeTypeName = Yii::$app->request->get('timeType') === 'send' ? '发货时间' : '记账时间';
+        $fileName = '供货商业绩-' . $timeTypeName . '-' . date("m-d");
         $objPHPExcel->getActiveSheet()->setTitle($fileName);
         $objPHPExcel->setActiveSheetIndex(0);
         $dir = './priceTable/' . $mainId;

+ 38 - 43
common/components/bookHd.php

@@ -1,5 +1,10 @@
 <?php
 
+/**
+ * 零售花店(hd)教学手册:目录与详情内容。
+ * BookController::actionList / actionDetail 读取;id 必须与 $data 的 key 一致,视频走 hdHost/jc/{id}.mp4。
+ */
+
 namespace common\components;
 
 class bookHd
@@ -7,62 +12,52 @@ class bookHd
 
     public static $list = [
         ['class' => '开始', 'icon' => '/book/begin.png', 'list' => [
-            ['title' => '花掌柜是什么', 'id' => 'hd_what'],
-            ['title' => '如何注册花掌柜', 'id' => 'hd_register'],
-            ['title' => '使用前的准备工作', 'id' => 'hd_prepare'],
-            ['title' => '添加花束到相册', 'id' => 'hd_add_hs_album'],
-            ['title' => '添加花束到商城', 'id' => 'hd_add_hs_mall'],
-            ['title' => '编辑花束简介', 'id' => 'hd_edit_hs_intro'],
-            ['title' => '售后说明和养护知识', 'id' => 'hd_image_text'],
-            ['title' => '添加修改分类', 'id' => 'hd_category'],
-            ['title' => '花束和分类的排序', 'id' => 'hd_order'],
-            ['title' => '分享相册和商城', 'id' => 'hd_share'],
-            ['title' => '搞充值活动', 'id' => 'hd_recharge'],
-            ['title' => '登记客户生日', 'id' => 'hd_birthday'],
-            ['title' => '收款码', 'id' => 'hd_gathering_code'],
+            ['title' => '如何跟批发店购买花材', 'id' => 'ls_buy_item'],
+            ['title' => '分类如何管理与配置', 'id' => 'ls_category_manage'],
+            ['title' => '商品添加与修改', 'id' => 'ls_goods_manage'],
+            ['title' => '花材的添加与管理', 'id' => 'ls_item_mange'],
+            ['title' => '导航栏、轮播图、金刚区的设置', 'id' => 'ls_index'],
+            ['title' => '热门推荐、今日上新、更多商品', 'id' => 'ls_hot'],
+            ['title' => '场景管理与使用', 'id' => 'ls_scene'],
+            //['title' => '节日涨价配置', 'id' => 'hd_category'],
+            ['title' => '客户售后处理', 'id' => 'ls_refund'],
+            ['title' => '秒杀活动', 'id' => 'ls_seckill'],
+            ['title' => '团购活动', 'id' => 'ls_group'],
         ]],
     ];
 
+    // 详情按 $list 的 id 取值;点开某条教程时 BookController 拼完整视频地址
     public static $data = [
-        'hd_what' => [
-            ['style' => 'video', 'value' => 'jc/hd_what.mp4'],
-        ],
-        'hd_register' => [
-            ['style' => 'video', 'value' => 'jc/hd_register.mp4'],
-        ],
-        'hd_prepare' => [
-            ['style' => 'video', 'value' => 'jc/hd_prepare.mp4'],
-        ],
-        'hd_add_hs_album' => [
-            ['style' => 'video', 'value' => 'jc/hd_add_hs_album.mp4'],
+        'ls_buy_item' => [
+            ['style' => 'video', 'value' => 'jc/ls_buy_item.mp4'],
         ],
-        'hd_add_hs_mall' => [
-            ['style' => 'video', 'value' => 'jc/hd_add_hs_mall.mp4'],
+        'ls_category_manage' => [
+            ['style' => 'video', 'value' => 'jc/ls_category_manage.mp4'],
         ],
-        'hd_edit_hs_intro' => [
-            ['style' => 'video', 'value' => 'jc/hd_edit_hs_intro.mp4'],
+        'ls_goods_manage' => [
+            ['style' => 'video', 'value' => 'jc/ls_goods_manage.mp4'],
         ],
-        'hd_image_text' => [
-            ['style' => 'video', 'value' => 'jc/hd_image_text.mp4'],
+        'ls_item_mange' => [
+            ['style' => 'video', 'value' => 'jc/ls_item_mange.mp4'],
         ],
-        'hd_category' => [
-            ['style' => 'video', 'value' => 'jc/hd_category.mp4'],
+        'ls_index' => [
+            ['style' => 'video', 'value' => 'jc/ls_index.mp4'],
         ],
-        'hd_order' => [
-            ['style' => 'video', 'value' => 'jc/hd_order.mp4'],
+        'ls_hot' => [
+            ['style' => 'video', 'value' => 'jc/ls_hot.mp4'],
         ],
-        'hd_share' => [
-            ['style' => 'video', 'value' => 'jc/hd_share.mp4'],
+        'ls_scene' => [
+            ['style' => 'video', 'value' => 'jc/ls_scene.mp4'],
         ],
-        'hd_recharge' => [
-            ['style' => 'video', 'value' => 'jc/hd_recharge.mp4'],
+        'ls_refund' => [
+            ['style' => 'video', 'value' => 'jc/ls_refund.mp4'],
         ],
-        'hd_birthday' => [
-            ['style' => 'video', 'value' => 'jc/hd_birthday.mp4'],
+        'ls_seckill' => [
+            ['style' => 'video', 'value' => 'jc/ls_seckill.mp4'],
         ],
-        'hd_gathering_code' => [
-            ['style' => 'video', 'value' => 'jc/hd_gathering_code.mp4'],
+        'ls_group' => [
+            ['style' => 'video', 'value' => 'jc/ls_group.mp4'],
         ],
     ];
 
-}
+}