0) { if (isset($v['presell']) && $v['presell'] == 1) { $v['classId'] = self::PRESELL_CLASS_ID;; $v['className'] = '预售专区'; $itemGroup[] = $v; unset($v['className']); unset($v['py']); $preSellItem[] = $v; } elseif ((isset($v['discountPrice']) && $v['discountPrice'] > 0) || ($reachNum > 0 && $reachNumDiscount > 0)) { $v['classId'] = self::TJ_CLASS_ID;; $v['className'] = '今日推荐'; $itemGroup[] = $v; unset($v['className']); unset($v['py']); $tjItem[] = $v; } } } } $classMapItem = []; if ($itemInfoData) { foreach ($itemInfoData as $v) { $classMapItem[$v['classId']][] = $v['itemId']; } } $classData = []; foreach ($classInfo as $classVal) { $classId = $classVal['id']; $className = $classVal['name'] ?? ''; $print = $classVal['print'] ?? 1; $cover = $classVal['cover'] ?? ''; if ($classId > 0) { $tmp = []; $tmp['classId'] = $classId; $tmp['className'] = $classVal['name'] ?? ''; $tmp['classCover'] = $cover; $tmp['print'] = $print; $items = $classMapItem[$classId] ?? []; if ($items) { if ($itemInfoData) { foreach ($itemInfoData as $v) { if (in_array($v['itemId'], $items)) { //冗余给前端使用 2021.1.31 lqh $v['classId'] = $classId; $v['className'] = $className; $itemGroup[] = $v; unset($v['className']); unset($v['py']); $tmp['child'][] = $v; } } } else { $tmp['child'] = []; } } else { $tmp['child'] = []; } $classData[] = $tmp; } } if (!empty($tjItem)) { $tjClass = [[ 'classId' => self::TJ_CLASS_ID, 'className' => '今日推荐', 'print' => 0, 'classCover' => imgUtil::groupImg('item_class/tj.jpg'), 'child' => $tjItem, ]]; $classData = array_merge($tjClass, $classData); } if (!empty($preSellItem)) { $preSellClass = [[ 'classId' => self::PRESELL_CLASS_ID, 'className' => '预售专区', 'print' => 0, 'classCover' => imgUtil::groupImg('item_class/mrfl.png'), 'child' => $preSellItem, ]]; $classData = array_merge($preSellClass, $classData); } return ['classItem' => $classData, 'itemList' => $itemGroup]; } //组装分类花材数据 public static function assembleData($classInfo, $itemInfoData, $showTodayDiscount = false) { $tjItem = []; //特价 $mjItem = []; //满减 $itemGroup = []; $preSellItem = []; //预售 if ($itemInfoData) { foreach ($itemInfoData as $v) { $reachNum = $v['reachNum'] ?? 0; $reachNumDiscount = $v['reachNumDiscount'] ?? 0; if ($reachNum > 0 && $reachNumDiscount > 0) { $v['classId'] = self::OFTEN_CLASS_ID; $v['className'] = '满减活动'; $mjItem[] = $v; $itemGroup[] = $v; } if ((isset($v['discountPrice']) && $v['discountPrice'] > 0)) { $v['classId'] = self::TJ_CLASS_ID; $v['className'] = '今日推荐'; $tjItem[] = $v; $itemGroup[] = $v; } if (isset($v['presell']) && $v['presell'] == 1) { $v['classId'] = self::PRESELL_CLASS_ID; $v['className'] = '预售专区'; $preSellItem[] = $v; $itemGroup[] = $v; } } } $classMapItem = []; if ($itemInfoData) { foreach ($itemInfoData as $v) { $classMapItem[$v['classId']][] = $v['itemId']; } } $classData = []; foreach ($classInfo as $classVal) { $classId = $classVal['id']; $className = $classVal['name'] ?? ''; $print = $classVal['print'] ?? 1; $cover = $classVal['cover'] ?? ''; if ($classId > 0) { $tmp = []; $tmp['classId'] = $classId; $tmp['className'] = $classVal['name'] ?? ''; $tmp['classCover'] = $cover; $tmp['print'] = $print; $items = $classMapItem[$classId] ?? []; if ($items) { if ($itemInfoData) { foreach ($itemInfoData as $v) { if (in_array($v['itemId'], $items)) { //冗余给前端使用 2021.1.31 lqh $v['classId'] = $classId; $v['className'] = $className; $v['print'] = $print; $tmp['child'][] = $v; $itemGroup[] = $v; } } } else { $tmp['child'] = []; } } else { $tmp['child'] = []; } $classData[] = $tmp; } } if ($showTodayDiscount && !empty($mjItem)) { $mjClass = [[ 'classId' => self::OFTEN_CLASS_ID, 'className' => '满减活动', 'print' => 0, 'classCover' => imgUtil::groupImg('item_class/mrfl.jpg'), 'child' => $mjItem, ]]; $classData = array_merge($mjClass, $classData); } if ($showTodayDiscount && !empty($tjItem)) { //限购的排在最前面,多处同步修改limit_ahead $tjItem = arrayUtil::arraySort($tjItem, 'limitBuy'); $tjClass = [[ 'classId' => self::TJ_CLASS_ID, 'className' => '今日推荐', 'print' => 0, 'classCover' => imgUtil::groupImg('item_class/tj.jpg'), 'child' => $tjItem, ]]; $classData = array_merge($tjClass, $classData); } if ($showTodayDiscount && !empty($preSellItem)) { $preSellClass = [[ 'classId' => self::PRESELL_CLASS_ID, 'className' => '预售专区', 'print' => 0, 'classCover' => imgUtil::groupImg('item_class/mrfl.png'), 'child' => $preSellItem, ]]; $classData = array_merge($preSellClass, $classData); } return ['classItem' => $classData, 'itemList' => $itemGroup]; } //根据ghsItemInfo [{productId:0,itemPrice:1,bigNum:1,smallNum:0}] 计算总价格,总重量 public static function groupCargo($ghsItemInfo) { $productIds = array_column($ghsItemInfo, 'productId'); $productData = ProductClass::getProductByIds($productIds); $productData = array_column($productData, NULL, 'id'); $itemIds = array_column($productData, 'itemId'); $itemData = xhItemService::getByIds($itemIds); $itemData = array_column($itemData, NULL, 'id'); $data = [ 'totalPrice' => 0, 'totalWeight' => 0, ]; foreach ($ghsItemInfo as $v) { $productId = $v['productId']; $itemId = $productData[$productId]['itemId']; $unitNum = $itemData[$itemId]['unitNum'] ?? 0; $weight = $itemData[$itemId]['weight'] ?? 0;// 每扎重量 $itemNum = ProductClass::mergeItemNum($v['bigNum'], $v['smallNum'], $unitNum); // 总共多少扎 $weight = bcmul($weight, $itemNum, 2); $itemPrice = $productData[$productId]['price'] ?? 0; //当时售卖的价格 $price = bcmul($itemNum, $itemPrice, 2); $data['totalWeight'] = bcadd($data['totalWeight'], $weight, 2); $data['totalPrice'] = bcadd($data['totalPrice'], $price, 2); } return $data; } //下载所有花材的库存 ssh 20250328 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); $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'] ?? ''; $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("H"); $file = $date . '_stock.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) { $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); $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'] ?? ''; $cName = trim($cName); $price = $child['price'] ?? ''; $formatData[] = [ 'name' => $cName, 'price' => $price, 'type' => 'item', ]; if (isset($child['reachNum']) && $child['reachNum'] > 0) { if (isset($child['reachNumDiscount']) && $child['reachNumDiscount'] > 0) { $bigUnit = $child['bigUnit'] ?? '扎'; $reachPrice = bcsub($price, $child['reachNumDiscount'], 2); $reachPrice = floatval($reachPrice); $reachName = ' 满' . $child['reachNum'] . $bigUnit; $formatData[] = [ 'name' => $reachName, 'price' => $reachPrice, //满减活动花材 'type' => 'reach', ]; } } } } } $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, trim($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, trim($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, trim($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") . "-" . $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 20241028 public static function generateStockTable($sjId, $level, $mainId = 0) { //获取所有当前供货商的分类 //根据分类组装分类下的花材信息 //中央ID $classIds = ItemClassClass::getGhsItemClassAll($mainId); $where['mainId'] = $mainId; $where['status'] = 1; $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 = []; // echo "
";
//        print_r($where);
//        print_r($data);
//        die;
        foreach ($data as $key => $class) {
            $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") . "-剩余库存";

        $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)
    {
        //中央ID
        $classIds = ItemClassClass::getGhsItemClassAll($mainId);
//        $where['sjId'] = $sjId;
//        $where['shopId'] = $shopId;
        $where['mainId'] = $mainId;
        $where['delStatus'] = 0;
        $product = ProductClass::getAllByCondition($where, null, "*");
        $data = [];
        foreach ($product as $v) {
            $tmp = [];
            $tmp['id'] = $v['id'];
            $tmp['name'] = $v['name'];
            $data[$v['classId']][] = $tmp;
        }
        $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");

        //一行五列
        $column_start = "A";
        $column_end = "F";
        $title_array = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
            'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH'];
        $i = 1;
        $page = 0;
        $objPHPExcel->setActiveSheetIndex($page);
        foreach ($classIds as $k => $v) {
            $productData = $data[$v['id']] ?? [];
            if (empty($productData)) {
                continue;
            }
            $cate_name = $v['name'] ?? '';
            $objPHPExcel->getActiveSheet()->mergeCells("{$column_start}{$i}:{$column_end}{$i}")->setCellValue("A" . $i, $cate_name);
            //居中
            $objPHPExcel->getActiveSheet()->getStyle("{$column_start}{$i}:{$column_end}{$i}")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            //加粗
            $objPHPExcel->getActiveSheet()->getStyle("{$column_start}{$i}:{$column_end}{$i}")->getFont()->setSize(18)->setBold(true);
            $i++;

            if ($productData) {
                $newChunk = array_chunk($productData, 4); //6个一组
                foreach ($newChunk as $c) {

                    foreach ($c as $ck => $cv) {
                        $objPHPExcel->getActiveSheet()->setCellValue($title_array[$ck] . $i, $cv['name']);
                        //居中
                        $objPHPExcel->getActiveSheet()->getStyle("$title_array[$ck]$i")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                    }
                    $i++;
                    foreach ($c as $ck => $cv) {
                        $objDrawing = new \PHPExcel_Worksheet_Drawing;
                        $p = dirUtil::getBarcodeDir() . $cv['id'] . ".jpg";
                        if (!file_exists($p)) {
                            //生成条形码
                            barcodeUtil::generatorProductBarcode($cv['id']);
                        }
                        $objDrawing->setPath($p);
                        //$objDrawing->setHeight(130);//设置图片高度
                        $objDrawing->setOffsetX(28);//设置图片水平偏移
                        //$objDrawing->setOffsetY(1);//设置图片垂直偏移
                        $objPHPExcel->getActiveSheet()->getColumnDimension($title_array[$ck])->setWidth(22);
                        $objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(66);
                        $objPHPExcel->getActiveSheet()->getStyle("{$title_array[$ck] }{$i}:{$title_array[$ck] }{$i}")->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
                        $objDrawing->setCoordinates($title_array[$ck] . ($i));
                        $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
                        //居中
                        $objPHPExcel->getActiveSheet()->getStyle("$title_array[$ck]$i")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

                    }
                    $i++;
                    if ($i >= 18) {
                        $i = 1;
                        $page++;
                        $objPHPExcel->createSheet();
                        $objPHPExcel->setActiveSheetIndex($page);
                    }
                }
            }
        }
        $dir = './barcodeTable/' . $shopId;
        if (file_exists($dir) == false) {
            mkdir($dir, 0777, true);
        }
        $date = "条形码-" . date("m-d");

        $file = $date . '.xls';
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

        if (file_exists($dir . '/' . $file)) {
            unlink($dir . '/' . $file);
        }
        $objWriter->save($dir . '/' . $file);

        return ['file' => '/barcodeTable/' . $shopId . '/' . $file, 'shortFile' => $file];
    }

}