CsController.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace ghs\controllers;
  3. use biz\admin\classes\AdminRoleClass;
  4. use bizGhs\item\classes\ItemClassClass;
  5. use bizGhs\merchant\classes\ShopClass;
  6. use bizGhs\product\classes\ProductClass;
  7. use bizGhs\product\models\Product;
  8. use bizGhs\product\services\ProductService;
  9. use common\components\stringUtil;
  10. use common\components\util;
  11. use Yii;
  12. class CsController extends PublicController
  13. {
  14. public $sjId = 12568, $shopId = 214;
  15. public function actionItem()
  16. {
  17. $shopId = 214;
  18. if (getenv('YII_ENV', 'local') != 'production') {
  19. $shopId = 36225;
  20. $this->shopId = 36225;
  21. $this->sjId = 12715;
  22. }
  23. $py = Yii::$app->request->get('py', '');
  24. $type = Yii::$app->request->get('type', '');
  25. //默认只显示上架的商品
  26. $status = Yii::$app->request->get('status', 1);
  27. //获取所有当前供货商的分类 (全部、常用)
  28. //根据分类组装分类下的花材信息
  29. $classIds = ItemClassClass::getGhsItemClassAll($this->sjId);
  30. $where['sjId'] = $this->sjId;
  31. if ($py) {
  32. $pyName = strtolower($py);
  33. $where['py'] = $pyName;
  34. }
  35. $where['shopId'] = $shopId;
  36. if (!empty($status)) {
  37. $where['status'] = $status;
  38. }
  39. $where['delStatus'] = 0;
  40. $itemInfoData = ProductClass::getAllByCondition($where, ['inTurn' => SORT_DESC, 'actualSold' => SORT_DESC], "*");
  41. $itemInfoData = ProductClass::groupProductInfo($itemInfoData);
  42. $data = ProductService::assembleData($classIds, $itemInfoData );
  43. $formatData = [];
  44. foreach ($data as $key => $class) {
  45. $name = $class['className'] ?? '';
  46. $formatData[] = ['name' => $name, 'price' => ''];
  47. if (isset($class['child']) && !empty($class['child'])) {
  48. foreach ($class['child'] as $cKey => $child) {
  49. $cName = $child['name'] ?? '';
  50. $price = $child['price'] ?? '';
  51. $formatData[] = [
  52. 'name' => $cName,
  53. 'price' => $price,
  54. ];
  55. }
  56. }
  57. }
  58. $phpExcelFile = Yii::getAlias("@vendor/phpoffice/phpexcel/");
  59. require_once($phpExcelFile . 'Classes/PHPExcel.php');
  60. $objPHPExcel = new \PHPExcel();
  61. $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
  62. ->setLastModifiedBy("Maarten Balliauw")
  63. ->setTitle("Office 2007 XLSX Test Document")
  64. ->setSubject("Office 2007 XLSX Test Document")
  65. ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
  66. ->setKeywords("office 2007 openxml php")
  67. ->setCategory("Test result file");
  68. $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
  69. $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(4);
  70. $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日')." 价格表");
  71. $objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.4);
  72. $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0);
  73. $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.1);
  74. $objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0);
  75. $objPHPExcel->getActiveSheet()->getPageMargins()->setHeader(0.1);
  76. $objPHPExcel->getActiveSheet()->getPageMargins()->setFooter(0);
  77. $i = 1;
  78. $letter = [1=>['A','B'],2=>['C','D'],3=>['E','F'],4=>['G','H'],5=>['I','J'],6=>['K','L'],7=>['M','N'],
  79. 8=>['O','P'],9=>['Q','R'],10=>['S','T'],11=>['U','V']];
  80. $lastCell = '';
  81. //最大行
  82. $max = 50;
  83. foreach ($formatData as $key => $product) {
  84. $currentPage = ceil($i/$max);
  85. $x = $i%$max == 0 ? $max : $i%$max;
  86. $before = $letter[$currentPage][0] ?? 'A';
  87. $after = $letter[$currentPage][1] ?? 'B';
  88. if(isset($product['price']) == false || empty($product['price'])){
  89. //没有价格的合并单元格
  90. $objPHPExcel->getActiveSheet()->mergeCells("{$before}{$x}:{$after}{$x}")->setCellValue($before . $x, $product['name']);
  91. //加粗
  92. $objPHPExcel->getActiveSheet()->getStyle($before . $x)->getFont()->setBold(true);
  93. //居中
  94. $objPHPExcel->getActiveSheet()->getStyle($before. $x)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  95. }else{
  96. $objPHPExcel->getActiveSheet()->setCellValue($before. $x, $product['name'])->setCellValue($after . $x, $product['price']);
  97. //字体大小
  98. $objPHPExcel->getActiveSheet()->getStyle($before. $x)->getFont()->setSize(10);
  99. }
  100. $lastCell = $after.$max;
  101. $i++;
  102. }
  103. //设置边框
  104. $objPHPExcel->getActiveSheet()->getStyle('A1:'.$lastCell)->applyFromArray(array('borders' => array('allborders' => array('style' => \PHPExcel_Style_Border::BORDER_THIN),)));
  105. $objPHPExcel->getActiveSheet()->setTitle('价格表');
  106. $objPHPExcel->setActiveSheetIndex(0);
  107. header('Content-Type: application/vnd.ms-excel');
  108. header('Content-Disposition: attachment;filename="0922.xls"');
  109. header('Cache-Control: max-age=0');
  110. header('Cache-Control: max-age=1');
  111. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  112. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  113. header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  114. header('Pragma: public'); // HTTP/1.0
  115. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  116. $objWriter->save('php://output');
  117. exit;
  118. }
  119. //下载文件 ssh 20210922
  120. public function actionExcel()
  121. {
  122. $filePath = './priceTable/12715/09-22.xls';
  123. $file=fopen($filePath,"r");
  124. header("Content-Type: application/vnd.ms-excel");
  125. header("Accept-Ranges: bytes");
  126. header("Accept-Length: ".filesize($filePath));
  127. header("Content-Disposition: attachment; filename=2.xls");
  128. echo fread($file,filesize($filePath));
  129. fclose($file);
  130. }
  131. }