shish vor 2 Jahren
Ursprung
Commit
defd18293f
1 geänderte Dateien mit 152 neuen und 0 gelöschten Zeilen
  1. 152 0
      app-ghs/controllers/StatBookController.php

+ 152 - 0
app-ghs/controllers/StatBookController.php

@@ -4,6 +4,7 @@ namespace ghs\controllers;
 
 use biz\shop\classes\ShopExtClass;
 use bizGhs\book\classes\BookItemClass;
+use bizGhs\book\classes\BookItemCustomClass;
 use bizGhs\product\classes\ProductClass;
 use common\components\dateUtil;
 use common\components\printUtil;
@@ -14,6 +15,157 @@ use common\components\util;
 class StatBookController extends BaseController
 {
 
+    //导出库存分配 ssh 20240808
+    public function actionExportStockAssign()
+    {
+        $mainId = $this->mainId ?? 0;
+        $shop = $this->shop;
+        $bookSn = $shop->bookSn ?? 0;
+        if (empty($bookSn)) {
+            util::fail('没有开启预订活动');
+        }
+        $productList = ProductClass::getAllByCondition(['mainId' => $mainId, 'stock>' => 0], null, '*', 'id');
+        $bookItemRes = BookItemClass::getAllByCondition(['bookSn' => $bookSn], null, '*', null);
+        if (empty($bookItemRes)) {
+            util::fail('没有预订花材');
+        }
+        $bookItemCustomData = BookItemCustomClass::getAllByCondition(['bookSn' => $bookSn], null, '*');
+        $bookItemCustomRes = [];
+        if (!empty($bookItemCustomData)) {
+            foreach ($bookItemCustomData as $bc) {
+                $itemId = $bc['itemId'] ?? 0;
+                $bookItemCustomRes[$itemId][] = $bc;
+            }
+        }
+        $arr = [];
+        foreach ($bookItemRes as $bookItemSingle) {
+            $productId = $bookItemSingle['itemId'] ?? 0;
+            $onNum = $bookItemSingle['onNum'] ?? 0;
+            $currentProduct = $productList[$productId] ?? [];
+            $stock = $currentProduct['stock'] ?? 0;
+            $remainNum = $stock > $onNum ? bcsub($stock, $onNum) : 0;
+            if (isset($bookItemCustomRes[$productId]) == false) {
+                continue;
+            }
+            $currentBookItemCustom = $bookItemCustomRes[$productId];
+            foreach ($currentBookItemCustom as $current) {
+                $itemName = $current['name'] ?? '';
+                $bookDataName = $current['customName'] ?? '';
+                $seatSn = $current['seatSn'] ?? '';
+                $bookNum = $current['bookNum'] ?? 0;
+                $onNum = $current['onNum'] ?? 0;
+                $roadNum = $current['roadNum'] ?? 0;
+                $sub = bcsub($bookNum, $onNum);
+                $wait = bcsub($sub, $roadNum);
+                if ($remainNum <= 0) {
+                    continue;
+                }
+                $upNum = $remainNum >= $wait ? $wait : $remainNum;
+                $remainNum = bcsub($remainNum, $upNum);
+                $arr[] = [
+                    'itemName' => $itemName,
+                    'customName' => $bookDataName,
+                    'seatSn' => $seatSn,
+                    'bookNum' => $bookNum,
+                    'onNum' => $onNum,
+                    'roadNum' => $roadNum,
+                    'wait' => $upNum,
+                ];
+            }
+        }
+        if (empty($arr)) {
+            util::fail('没有数据要导出');
+        }
+
+        $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()->getColumnDimension('A')->setWidth(20);
+        //加粗
+        $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('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('F1')->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);
+        $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
+        $objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
+
+        $baseRow = 2;
+        foreach ($arr as $key => $bookData) {
+            $i = $baseRow + $key;
+            $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $bookData['itemName']);
+            $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $bookData['customName'].'/'.$bookData['seatSn']);
+            $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $bookData['bookNum']);
+            $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $bookData['onNum']);
+            $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $bookData['roadNum']);
+            $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $bookData['wait']);
+            //居左
+            $objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+            $objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+            $objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+            $objPHPExcel->getActiveSheet()->getStyle('D' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+            $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();
+        $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]);
+    }
+
     public function actionList()
     {
         $get = Yii::$app->request->get();