shish 18 часов назад
Родитель
Сommit
aa8e1897a6

+ 10 - 7
app-ghs/controllers/PurchaseOrderController.php

@@ -683,7 +683,7 @@ class PurchaseOrderController extends BaseController
         }
     }
 
-    // 采购入库单列表:searchTime 筛单时间 entryTime,sendSearchTime 筛发货时间 sendTime
+    // 采购入库单列表:searchTime 筛单时间 entryTime,sendSearchTime 筛发货时间 sendTime
     public function actionList()
     {
         $where = [];
@@ -718,7 +718,7 @@ class PurchaseOrderController extends BaseController
                 $where['ghsName'] = ['like', $search];
             }
         }
-        // 账单时间:采购入库单按入库日 entryTime(没有销售单那种 payTime
+        // 开单时间:采购入库单按入库日 entryTime(业务上当作开单时间
         $searchTime = $get['searchTime'] ?? '';
         if (!empty($searchTime)) {
             $startTime = $get['startTime'] ?? '';
@@ -726,7 +726,7 @@ class PurchaseOrderController extends BaseController
             $period = dateUtil::formatTime($searchTime, $startTime, $endTime);
             $where['entryTime'] = ['between', [$period['startTime'], $period['endTime']]];
         }
-        // 发货时间:按 sendTime,可与单时间同时生效
+        // 发货时间:按 sendTime,可与单时间同时生效
         $sendSearchTime = $get['sendSearchTime'] ?? '';
         if (!empty($sendSearchTime)) {
             $sendStartTime = $get['sendStartTime'] ?? '';
@@ -741,11 +741,13 @@ class PurchaseOrderController extends BaseController
         if ($export == 1) {
             ini_set('memory_limit', '2045M');
             set_time_limit(0);
-            if (isset($where['entryTime']) == false) {
+            // 导出须先选开单或发货时间段,最长一个月
+            $exportRange = $where['entryTime'] ?? $where['sendTime'] ?? null;
+            if (empty($exportRange)) {
                 util::fail('请选时间段');
             }
-            $start = $where['entryTime'][1][0];
-            $end = $where['entryTime'][1][1];
+            $start = $exportRange[1][0];
+            $end = $exportRange[1][1];
             $monthTime = bcmul(31, 86400);
             $startArea = strtotime($start);
             $endArea = strtotime($end);
@@ -801,7 +803,8 @@ class PurchaseOrderController extends BaseController
         $data = PurchaseOrderClass::getOrderList($where);
 
         if ($export == 1) {
-            PurchaseOrderClass::exportOrderData($data, $this->mainId);
+            $searchTimeType = intval($get['searchTimeType'] ?? 0);
+            PurchaseOrderClass::exportOrderData($data, $this->mainId, $searchTimeType);
         }
 
         //状态统计,很慢,暂时隐藏

+ 52 - 37
biz-ghs/order/classes/PurchaseOrderClass.php

@@ -2023,7 +2023,11 @@ class PurchaseOrderClass extends BaseClass
         util::success(['file' => $fileUrl, 'shortFile' => $file]);
     }
 
-    public static function exportOrderData($respond, $mainId)
+    /**
+     * 导出采购单明细 Excel。
+     * $searchTimeType 与列表一致:0 开单 entryTime、2 发货 sendTime,只影响文件名里的时间类型标注。
+     */
+    public static function exportOrderData($respond, $mainId, $searchTimeType = 0)
     {
         $orderList = $respond['list'] ?? [];
         if (empty($orderList)) {
@@ -2083,24 +2087,25 @@ class PurchaseOrderClass extends BaseClass
 
         $objPHPExcel->getActiveSheet()->setCellValue('A1', '订单号');
         $objPHPExcel->getActiveSheet()->setCellValue('B1', '创建时间');
-        $objPHPExcel->getActiveSheet()->setCellValue('C1', '入库时间');
-        $objPHPExcel->getActiveSheet()->setCellValue('D1', '订单金额');
-        $objPHPExcel->getActiveSheet()->setCellValue('E1', '退款金额');
-        $objPHPExcel->getActiveSheet()->setCellValue('F1', '实际金额');
-        $objPHPExcel->getActiveSheet()->setCellValue('G1', '供货商名称');
-        $objPHPExcel->getActiveSheet()->setCellValue('H1', '录入人员');
-        $objPHPExcel->getActiveSheet()->setCellValue('I1', '采购人员');
-        $objPHPExcel->getActiveSheet()->setCellValue('J1', '状态');
-        $objPHPExcel->getActiveSheet()->setCellValue('K1', '打印次数');
-        $objPHPExcel->getActiveSheet()->setCellValue('L1', '结清状态');
-        $objPHPExcel->getActiveSheet()->setCellValue('M1', '备注');
-        $objPHPExcel->getActiveSheet()->setCellValue('N1', '花材Id');
-        $objPHPExcel->getActiveSheet()->setCellValue('O1', '花材名称');
-        $objPHPExcel->getActiveSheet()->setCellValue('P1', '单价');
-        $objPHPExcel->getActiveSheet()->setCellValue('Q1', '数量');
-        $objPHPExcel->getActiveSheet()->setCellValue('R1', '已退数量');
-        $objPHPExcel->getActiveSheet()->setCellValue('S1', '金额');
-        $objPHPExcel->getActiveSheet()->setCellValue('T1', '分类');
+        $objPHPExcel->getActiveSheet()->setCellValue('C1', '开单时间');
+        $objPHPExcel->getActiveSheet()->setCellValue('D1', '发货时间');
+        $objPHPExcel->getActiveSheet()->setCellValue('E1', '订单金额');
+        $objPHPExcel->getActiveSheet()->setCellValue('F1', '退款金额');
+        $objPHPExcel->getActiveSheet()->setCellValue('G1', '实际金额');
+        $objPHPExcel->getActiveSheet()->setCellValue('H1', '供货商名称');
+        $objPHPExcel->getActiveSheet()->setCellValue('I1', '录入人员');
+        $objPHPExcel->getActiveSheet()->setCellValue('J1', '采购人员');
+        $objPHPExcel->getActiveSheet()->setCellValue('K1', '状态');
+        $objPHPExcel->getActiveSheet()->setCellValue('L1', '打印次数');
+        $objPHPExcel->getActiveSheet()->setCellValue('M1', '结清状态');
+        $objPHPExcel->getActiveSheet()->setCellValue('N1', '备注');
+        $objPHPExcel->getActiveSheet()->setCellValue('O1', '花材Id');
+        $objPHPExcel->getActiveSheet()->setCellValue('P1', '花材名称');
+        $objPHPExcel->getActiveSheet()->setCellValue('Q1', '单价');
+        $objPHPExcel->getActiveSheet()->setCellValue('R1', '数量');
+        $objPHPExcel->getActiveSheet()->setCellValue('S1', '已退数量');
+        $objPHPExcel->getActiveSheet()->setCellValue('T1', '金额');
+        $objPHPExcel->getActiveSheet()->setCellValue('U1', '分类');
 
         //设置宽度
         $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
@@ -2131,6 +2136,7 @@ class PurchaseOrderClass extends BaseClass
         $objPHPExcel->getActiveSheet()->getStyle('R1')->getFont()->setSize(9)->setBold(true);
         $objPHPExcel->getActiveSheet()->getStyle('S1')->getFont()->setSize(9)->setBold(true);
         $objPHPExcel->getActiveSheet()->getStyle('T1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('U1')->getFont()->setSize(9)->setBold(true);
 
         $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
         $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
@@ -2152,6 +2158,7 @@ class PurchaseOrderClass extends BaseClass
         $objPHPExcel->getActiveSheet()->getStyle('R1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
         $objPHPExcel->getActiveSheet()->getStyle('S1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
         $objPHPExcel->getActiveSheet()->getStyle('T1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('U1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
 
         $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
         $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
@@ -2173,6 +2180,7 @@ class PurchaseOrderClass extends BaseClass
         $objPHPExcel->getActiveSheet()->getStyle('R1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
         $objPHPExcel->getActiveSheet()->getStyle('S1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
         $objPHPExcel->getActiveSheet()->getStyle('T1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('U1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
 
         $baseRow = 2;
         $x = 0;
@@ -2190,16 +2198,21 @@ class PurchaseOrderClass extends BaseClass
                     } else {
                         $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, '');
                     }
-                    $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $orderData['orderPrice']);
-                    $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $orderData['tkPrice']);
-                    $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $orderData['actPrice']);
-                    $objPHPExcel->getActiveSheet()->setCellValue('G' . $i, $orderData['ghsName']);
-                    $objPHPExcel->getActiveSheet()->setCellValue('H' . $i, $orderData['shopAdminName']);
-                    $objPHPExcel->getActiveSheet()->setCellValue('I' . $i, $orderData['cgStaffName']);
+                    $sendTime = $orderData['sendTime'] ?? '';
+                    if ($sendTime === '' || strpos($sendTime, '0000-00-00') !== false) {
+                        $sendTime = '';
+                    }
+                    $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $sendTime);
+                    $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $orderData['orderPrice']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $orderData['tkPrice']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('G' . $i, $orderData['actPrice']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('H' . $i, $orderData['ghsName']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('I' . $i, $orderData['shopAdminName']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('J' . $i, $orderData['cgStaffName']);
                     $map = [1 => '待确认', 2 => '待发货', 3 => '待入库', 4 => '已入库', 5 => '已取消'];
                     $statusName = isset($orderData['status']) && isset($map[$orderData['status']]) ? $map[$orderData['status']] : '未知';
-                    $objPHPExcel->getActiveSheet()->setCellValue('J' . $i, $statusName);
-                    $objPHPExcel->getActiveSheet()->setCellValue('K' . $i, $orderData['printNum'] ?? 0);
+                    $objPHPExcel->getActiveSheet()->setCellValue('K' . $i, $statusName);
+                    $objPHPExcel->getActiveSheet()->setCellValue('L' . $i, $orderData['printNum'] ?? 0);
                     $debtName = '';
                     if ($orderData['debt'] == 1) {
                         $debtName = '未结清';
@@ -2207,20 +2220,20 @@ class PurchaseOrderClass extends BaseClass
                     if ($orderData['debt'] == 2) {
                         $debtName = '已结清';
                     }
-                    $objPHPExcel->getActiveSheet()->setCellValue('L' . $i, $debtName);
-                    $objPHPExcel->getActiveSheet()->setCellValue('M' . $i, $orderData['remark']);
-                    $objPHPExcel->getActiveSheet()->setCellValue('N' . $i, $orderInfo['productId']);
-                    $objPHPExcel->getActiveSheet()->setCellValue('O' . $i, $orderInfo['name']);
-                    $objPHPExcel->getActiveSheet()->setCellValue('P' . $i, $orderInfo['bigPrice']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('M' . $i, $debtName);
+                    $objPHPExcel->getActiveSheet()->setCellValue('N' . $i, $orderData['remark']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('O' . $i, $orderInfo['productId']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('P' . $i, $orderInfo['name']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('Q' . $i, $orderInfo['bigPrice']);
                     $remainNum = bcsub($orderInfo['itemNum'], $orderInfo['refundNum']);
                     $price = bcmul($remainNum, $orderInfo['bigPrice'], 2);
                     $price = floatval($price);
-                    $objPHPExcel->getActiveSheet()->setCellValue('Q' . $i, $remainNum);
-                    $objPHPExcel->getActiveSheet()->setCellValue('R' . $i, $orderInfo['refundNum']);
-                    $objPHPExcel->getActiveSheet()->setCellValue('S' . $i, $price);
+                    $objPHPExcel->getActiveSheet()->setCellValue('R' . $i, $remainNum);
+                    $objPHPExcel->getActiveSheet()->setCellValue('S' . $i, $orderInfo['refundNum']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('T' . $i, $price);
                     $classId = $orderInfo['classId'] ?? 0;
                     $className = isset($classList[$classId]) && isset($classList[$classId]['name']) ? $classList[$classId]['name'] : '';
-                    $objPHPExcel->getActiveSheet()->setCellValue('T' . $i, $className);
+                    $objPHPExcel->getActiveSheet()->setCellValue('U' . $i, $className);
 
                     //居左
                     $objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
@@ -2243,10 +2256,12 @@ class PurchaseOrderClass extends BaseClass
                     $objPHPExcel->getActiveSheet()->getStyle('R' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                     $objPHPExcel->getActiveSheet()->getStyle('S' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                     $objPHPExcel->getActiveSheet()->getStyle('T' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+                    $objPHPExcel->getActiveSheet()->getStyle('U' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                 }
             }
         }
-        $fileName = '采购单明细-' . time();
+        $timeTypeName = $searchTimeType === 2 ? '发货时间' : '开单时间';
+        $fileName = '采购单明细-' . $timeTypeName . '-' . time();
         $objPHPExcel->getActiveSheet()->setTitle($fileName);
         $objPHPExcel->setActiveSheetIndex(0);
         $dir = './priceTable/' . $mainId;