Browse Source

采购单表下载

shish 2 năm trước cách đây
mục cha
commit
31bc6415c7

+ 23 - 0
app-ghs/controllers/PurchaseOrderController.php

@@ -497,6 +497,7 @@ class PurchaseOrderController extends BaseController
     {
         $where = [];
         $get = Yii::$app->request->get();
+        $export = $get['export']??0;
         $where['shopId'] = $this->shopId;
         $orderStatus = $get['status'] ?? '';
         if ($orderStatus) {
@@ -528,6 +529,23 @@ class PurchaseOrderController extends BaseController
             $where['entryTime'] = ['between', [$period['startTime'], $period['endTime']]];
         }
 
+        if($export == 1){
+            ini_set('memory_limit', '2045M');
+            set_time_limit(0);
+            if(isset($where['entryTime']) == false){
+                util::fail('请选时间段');
+            }
+            $start = $where['entryTime'][1][0];
+            $end = $where['entryTime'][1][1];
+            $monthTime = bcmul(31,86400);
+            $startArea = strtotime($start);
+            $endArea = strtotime($end);
+            $diff = bcsub($endArea,$startArea);
+            if($diff>$monthTime){
+                util::fail('最长可导出一个月');
+            }
+        }
+
         //采购限制访问,有多处要同步修改,关键词cg_limit_access
         if (getenv('YII_ENV') == 'production') {
             //纯彩花艺
@@ -545,6 +563,11 @@ class PurchaseOrderController extends BaseController
         }
 
         $data = PurchaseOrderClass::getOrderList($where);
+
+        if ($export == 1) {
+            PurchaseOrderClass::exportOrderData($data, $this->mainId);
+        }
+
         //状态统计,很慢,暂时隐藏
         //$statData = PurchaseOrderClass::statNum($this->shopId);
         $statData = [

+ 180 - 0
biz-ghs/order/classes/PurchaseOrderClass.php

@@ -1267,4 +1267,184 @@ class PurchaseOrderClass extends BaseClass
         util::success(['file' => $fileUrl, 'shortFile' => $file]);
     }
 
+    public static function exportOrderData($respond, $mainId)
+    {
+        $orderList = $respond['list'] ?? [];
+        if (empty($orderList)) {
+            util::fail('没有数据需要导出');
+        }
+        $orderSnList = array_column($orderList, 'orderSn');
+        $orderItemData = PurchaseOrderItemClass::getAllByCondition(['orderSn' => ['in', $orderSnList]], null, '*');
+        $orderItemList = [];
+        if (!empty($orderItemData)) {
+            foreach ($orderItemData as $itemInfo) {
+                $orderSn = $itemInfo['orderSn'] ?? '';
+                $orderItemList[$orderSn][] = $itemInfo;
+            }
+        }
+        foreach ($orderList as $key => $orderInfo) {
+            $orderSn = $orderInfo['orderSn'] ?? '';
+            $itemList = $orderItemList[$orderSn] ?? [];
+            $orderList[$key]['itemList'] = $itemList;
+        }
+
+        $phpExcelFile = Yii::getAlias("@vendor/phpoffice/phpexcel/");
+        require_once($phpExcelFile . 'Classes/PHPExcel.php');
+
+        $objPHPExcel = new \PHPExcel();
+
+        $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
+            ->setLastModifiedBy("Maarten Balliauw")
+            ->setTitle("Office 2007 XLSX Document")
+            ->setSubject("Office 2007 XLSX Document")
+            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
+            ->setKeywords("office 2007 openxml php")
+            ->setCategory("file");
+
+        $ghsTitle = '供货商';
+        $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " " . $ghsTitle);
+
+        $objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.7);
+        $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.1);
+        $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.5);
+        $objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0);
+        $objPHPExcel->getActiveSheet()->getPageMargins()->setHeader(0.1);
+        $objPHPExcel->getActiveSheet()->getPageMargins()->setFooter(0);
+
+        $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()->getColumnDimension('A')->setWidth(20);
+        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
+        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
+        $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(30);
+        //加粗
+        $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('F1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('G1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('H1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('I1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('J1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('K1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('L1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('M1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('N1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('O1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('P1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('Q1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('R1')->getFont()->setSize(9)->setBold(true);
+        $objPHPExcel->getActiveSheet()->getStyle('S1')->getFont()->setSize(9)->setBold(true);
+
+        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('G1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('H1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('I1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('J1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('K1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('L1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('M1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('N1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('O1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('P1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('Q1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('R1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+        $objPHPExcel->getActiveSheet()->getStyle('S1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+
+        $baseRow = 2;
+        $x = 0;
+        foreach ($orderList as $key => $orderData) {
+            if (!empty($orderData['itemList'])) {
+                foreach ($orderData['itemList'] as $k => $orderInfo) {
+                    $i = $baseRow + $x;
+                    $x++;
+                    $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $orderData['orderSn']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $orderData['addTime']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $orderData['entryTime']);
+                    $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']);
+                    $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, '');
+                    $objPHPExcel->getActiveSheet()->setCellValue('L' . $i, '');
+                    $objPHPExcel->getActiveSheet()->setCellValue('M' . $i, '');
+                    $objPHPExcel->getActiveSheet()->setCellValue('N' . $i, $orderInfo['productId']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('O' . $i, $orderInfo['name']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('P' . $i, $orderInfo['bigPrice']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('Q' . $i, $orderInfo['itemNum']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('R' . $i, $orderInfo['totalPrice']);
+                    $objPHPExcel->getActiveSheet()->setCellValue('S' . $i, $orderInfo['refundNum']);
+
+                    //居左
+                    $objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('D' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('E' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('F' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('G' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('H' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('I' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('J' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('K' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('L' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('M' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('N' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('O' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('P' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('Q' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('R' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                    $objPHPExcel->getActiveSheet()->getStyle('S' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
+                }
+            }
+        }
+        $fileName = '订单明细-' . time();
+        $objPHPExcel->getActiveSheet()->setTitle($fileName);
+        $objPHPExcel->setActiveSheetIndex(0);
+        $dir = './priceTable/' . $mainId;
+        if (file_exists($dir) == false) {
+            mkdir($dir, 0777, true);
+        }
+        $date = $fileName;
+        $file = $date . '.xls';
+        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
+        if (file_exists($dir . '/' . $file)) {
+            unlink($dir . '/' . $file);
+        }
+        $objWriter->save($dir . '/' . $file);
+        $fileUrl = Yii::$app->params['ghsHost'] . '/priceTable/' . $mainId . '/' . $file;
+        util::success(['file' => $fileUrl, 'shortFile' => $file]);
+    }
+
 }