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];
}
}