瀏覽代碼

下载库存表

shish 1 年之前
父節點
當前提交
028a220438
共有 2 個文件被更改,包括 160 次插入0 次删除
  1. 11 0
      app-ghs/controllers/ProductController.php
  2. 149 0
      biz-ghs/product/services/ProductService.php

+ 11 - 0
app-ghs/controllers/ProductController.php

@@ -1407,6 +1407,17 @@ class ProductController extends BaseController
         util::success(['file' => $fileUrl, 'shortFile' => $shortFile]);
     }
 
+    //下载有库存花材,不含虚拟库存 ssh 20241-28
+    public function actionGenerateStockTable()
+    {
+        $level = Yii::$app->request->get('level', 0);
+        $respond = ProductService::generateStockTable($this->sjId, $level, $this->mainId);
+        $file = $respond['file'] ?? '';
+        $shortFile = $respond['shortFile'] ?? '';
+        $fileUrl = Yii::$app->params['ghsHost'] . $file;
+        util::success(['file' => $fileUrl, 'shortFile' => $shortFile]);
+    }
+
     public function actionGenerateItemTable()
     {
         $level = Yii::$app->request->get('level', 0);

+ 149 - 0
biz-ghs/product/services/ProductService.php

@@ -544,6 +544,155 @@ class ProductService extends BaseService
         return ['file' => '/priceTable/' . $sjId . '/' . $file, 'shortFile' => $file];
     }
 
+
+    //下载库存表 ssh 20241028
+    public static function generateStockTable($sjId, $level, $mainId = 0)
+    {
+        $status = 1;
+
+        //获取所有当前供货商的分类
+        //根据分类组装分类下的花材信息
+        //中央ID
+        $classIds = ItemClassClass::getGhsItemClassAll($mainId);
+
+        $where['mainId'] = $mainId;
+        $where['status'] = $status;
+        $where['delStatus'] = 0;
+        $where['stock>']=0;
+        $where['virtualStock'] = 0;
+
+        $itemInfoData = ProductClass::getAllByCondition($where, ['inTurn' => SORT_DESC, 'actualSold' => SORT_DESC], "*");
+        $itemInfoData = ProductClass::groupProductInfo($itemInfoData, $level);
+        $respond = self::assembleData($classIds, $itemInfoData, true);
+        $data = $respond['classItem'] ?? [];
+
+        $formatData = [];
+
+        foreach ($data as $key => $class) {
+            $print = $class['print'] ?? 1;
+            if ($print == 0) {
+                continue;
+            }
+            $name = $class['className'] ?? '';
+            $formatData[] = ['name' => $name, 'price' => '', 'type' => 'className'];
+            if (isset($class['child']) && !empty($class['child'])) {
+                foreach ($class['child'] as $cKey => $child) {
+                    $cName = $child['name'] ?? '';
+                    $stock = $child['stock'] ?? 0;
+                    $stock = floatval($stock);
+                    $formatData[] = [
+                        'name' => $cName,
+                        'price' => $stock,
+                        'type' => 'item',
+                    ];
+                }
+            }
+        }
+
+        $map = CustomClass::$nickNameMap;
+        $levelName = $map[$level] ?? '';
+
+        $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 Test Document")
+            ->setSubject("Office 2007 XLSX Test Document")
+            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
+            ->setKeywords("office 2007 openxml php")
+            ->setCategory("Test result file");
+
+        //$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " " . $levelName . "客户");
+        //$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " 编号 " . $level);
+        $topLevelName = $levelName;
+        $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " " . $topLevelName);
+
+        $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);
+
+        $i = 1;
+        $letter = [1 => ['A', 'B'], 2 => ['C', 'D'], 3 => ['E', 'F'], 4 => ['G', 'H'], 5 => ['I', 'J'], 6 => ['K', 'L'], 7 => ['M', 'N'],
+            8 => ['O', 'P'], 9 => ['Q', 'R'], 10 => ['S', 'T'], 11 => ['U', 'V']];
+        $lastCell = '';
+        //最大行
+        $max = 50;
+        foreach ($formatData as $key => $product) {
+            $currentPage = ceil($i / $max);
+            $x = $i % $max == 0 ? $max : $i % $max;
+            $before = $letter[$currentPage][0] ?? 'A';
+            $after = $letter[$currentPage][1] ?? 'B';
+
+            //行高14
+            $objPHPExcel->getActiveSheet()->getRowDimension($x)->setRowHeight(15);
+
+            //设置表格宽度
+            $objPHPExcel->getActiveSheet()->getColumnDimension($before)->setWidth(11);
+            $objPHPExcel->getActiveSheet()->getColumnDimension($after)->setWidth(5);
+
+            if (isset($product['price']) == false || empty($product['price'])) {
+                //没有价格的合并单元格
+                $objPHPExcel->getActiveSheet()->mergeCells("{$before}{$x}:{$after}{$x}")->setCellValue($before . $x, $product['name']);
+                //加粗
+                $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getFont()->setSize(9)->setBold(true);
+                $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getFont()->setName('微软雅黑');
+                //居中
+                $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+                //垂直居中
+                $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
+            } else if (isset($product['type']) && $product['type'] == 'reach') {
+                $objPHPExcel->getActiveSheet()->setCellValue($before . $x, $product['name'])->setCellValue($after . $x, $product['price']);
+                //字体大小 加粗
+                $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getFont()->setSize(9)->setBold(true);
+                //红色
+                $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getFont()->getColor()->setARGB(\PHPExcel_Style_Color::COLOR_RED);
+                //垂直居中
+                $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
+                //字体大小 加粗
+                $objPHPExcel->getActiveSheet()->getStyle($after . $x)->getFont()->setSize(11)->setBold(true);
+                //红色
+                $objPHPExcel->getActiveSheet()->getStyle($after . $x)->getFont()->getColor()->setARGB(\PHPExcel_Style_Color::COLOR_RED);
+            } else {
+                $objPHPExcel->getActiveSheet()->setCellValue($before . $x, $product['name'])->setCellValue($after . $x, $product['price']);
+                //字体大小
+                $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getFont()->setSize(9);
+                //垂直居中
+                $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
+            }
+            $lastCell = $after . $max;
+            $i++;
+        }
+
+        //设置边框
+        $objPHPExcel->getActiveSheet()->getStyle('A1:' . $lastCell)->applyFromArray(array('borders' => array('allborders' => array('style' => \PHPExcel_Style_Border::BORDER_THIN),)));
+
+        $objPHPExcel->getActiveSheet()->setTitle('库存表');
+
+        $objPHPExcel->setActiveSheetIndex(0);
+
+        $dir = './priceTable/' . $sjId;
+        if (file_exists($dir) == false) {
+            mkdir($dir, 0777, true);
+        }
+        $date = date("m-d") . "-stock-";
+
+        $file = $date . '.xls';
+        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
+
+        if (file_exists($dir . '/' . $file)) {
+            unlink($dir . '/' . $file);
+        }
+        $objWriter->save($dir . '/' . $file);
+
+        return ['file' => '/priceTable/' . $sjId . '/' . $file, 'shortFile' => $file];
+    }
+
     //生成条形码 lqh 20211227
     public static function generateBarcodeTable($sjId, $shopId, $mainId = 0)
     {