소스 검색

打印花材

shish 3 년 전
부모
커밋
194741d647
3개의 변경된 파일153개의 추가작업 그리고 3개의 파일을 삭제
  1. 10 0
      app-ghs/controllers/ProductController.php
  2. 1 1
      biz-ghs/item/classes/ItemClassClass.php
  3. 142 2
      biz-ghs/product/services/ProductService.php

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

@@ -780,6 +780,16 @@ class ProductController extends BaseController
         util::success(['file' => $fileUrl, 'shortFile' => $shortFile]);
     }
 
+    public function actionGenerateItemTable()
+    {
+        $level = Yii::$app->request->get('level', 0);
+        $respond = ProductService::generateItemTable($this->sjId, $level, $this->mainId);
+        $file = $respond['file'] ?? '';
+        $shortFile = $respond['shortFile'] ?? '';
+        $fileUrl = Yii::$app->params['ghsHost'] . $file;
+        util::success(['file' => $fileUrl, 'shortFile' => $shortFile]);
+    }
+
     //下载条形码 lqh 20211227
     public function actionGenerateBarcodeTable()
     {

+ 1 - 1
biz-ghs/item/classes/ItemClassClass.php

@@ -116,7 +116,7 @@ class ItemClassClass extends BaseClass
     public static function getGhsItemClassAll($mainId)
     {
         $where = ['mainId' => $mainId];
-        $data = self::getAllList('id,name,cover', $where, 'inTurn desc');
+        $data = self::getAllList('id,name,cover,print', $where, 'inTurn desc');
         return $data;
     }
 

+ 142 - 2
biz-ghs/product/services/ProductService.php

@@ -49,12 +49,14 @@ class ProductService extends BaseService
         foreach ($classIds as $classVal) {
             $classId = $classVal['id'];
             $className = $classVal['name'] ?? '';
-            $cover = imgUtil::groupImg($classVal['cover'])."?x-oss-process=image/resize,m_fill,h_90,w_90";
+            $print = $classVal['print'] ?? 1;
+            $cover = imgUtil::groupImg($classVal['cover']) . "?x-oss-process=image/resize,m_fill,h_90,w_90";
             if ($classId > 0) {
                 $tmp = [];
                 $tmp['classId'] = $classId;
                 $tmp['className'] = $classVal['name'] ?? '';
                 $tmp['classCover'] = $cover;
+                $tmp['print'] = $print;
                 $items = $classMapItem[$classId] ?? [];
                 if ($items) {
                     if ($itemInfoData) {
@@ -63,6 +65,7 @@ class ProductService extends BaseService
                                 //冗余给前端使用 2021.1.31 lqh
                                 $v['classId'] = $classId;
                                 $v['className'] = $className;
+                                $v['print'] = $print;
                                 $tmp['child'][] = $v;
                             }
                         }
@@ -76,7 +79,8 @@ class ProductService extends BaseService
             }
         }
         if ($showTodayDiscount && !empty($tjItem)) {
-            $tjClass = [['classId' => self::TJ_CLASS_ID, 'className' => '今日特价', 'classCover' => imgUtil::groupImg('item_class/tj.jpg'), 'child' => $tjItem,]];
+            $tjClass = [['classId' => self::TJ_CLASS_ID, 'className' => '今日特价', 'print' => 0,
+                'classCover' => imgUtil::groupImg('item_class/tj.jpg'), 'child' => $tjItem,]];
             $classData = array_merge($tjClass, $classData);
         }
         return $classData;
@@ -111,6 +115,142 @@ class ProductService extends BaseService
         return $data;
     }
 
+    //生成价格表 ssh 20210922
+    public static function generateItemTable($sjId, $level, $mainId = 0)
+    {
+        $status = 1;
+
+        //获取所有当前供货商的分类
+        //根据分类组装分类下的花材信息
+        //中央ID
+        $classIds = ItemClassClass::getGhsItemClassAll($mainId);
+
+        $where['mainId'] = $mainId;
+        $where['status'] = $status;
+        $where['delStatus'] = 0;
+
+        $itemInfoData = ProductClass::getAllByCondition($where, ['inTurn' => SORT_DESC, 'actualSold' => SORT_DESC], "*");
+        $itemInfoData = ProductClass::groupProductInfo($itemInfoData, $level);
+
+        $data = self::assembleData($classIds, $itemInfoData, true);
+
+        $formatData = [];
+
+        foreach ($data as $key => $class) {
+            $print = $class['print'] ?? 1;
+            if ($print == 0) {
+                continue;
+            }
+            $name = $class['className'] ?? '';
+            $formatData[] = ['name' => $name, 'price' => ''];
+            if (isset($class['child']) && !empty($class['child'])) {
+                foreach ($class['child'] as $cKey => $child) {
+                    $cName = $child['name'] ?? '';
+                    $price = $child['price'] ?? '';
+                    $formatData[] = [
+                        'name' => $cName,
+                        'price' => $price,
+                    ];
+                }
+            }
+        }
+
+        $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;
+        if ($level == CustomClass::LEVEL_SK) {
+            $topLevelName = '';
+        }
+        $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 {
+                $objPHPExcel->getActiveSheet()->setCellValue($before . $x, $product['name'])->setCellValue($after . $x, '');
+                //字体大小
+                $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") . "-" . $levelName . "-编号" . $level;
+        $date = date("m-d") . "-" . $levelName;
+
+        $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];
+    }
+
     //生成价格表 ssh 20210922
     public static function generatePriceTable($sjId, $level, $mainId = 0)
     {