diff --git a/app/common/repositories/store/product/ProductRepository.php b/app/common/repositories/store/product/ProductRepository.php index c809b8d5..b7375138 100644 --- a/app/common/repositories/store/product/ProductRepository.php +++ b/app/common/repositories/store/product/ProductRepository.php @@ -988,6 +988,7 @@ class ProductRepository extends BaseRepository 'storeCategory', 'brand', 'merchant', + 'attrValue' ]); $count = $query->count(); $data = $query->page($page, $limit)->setOption('field', [])->field($this->admin_filed)->select(); diff --git a/crmeb/services/SpreadsheetExcelService.php b/crmeb/services/SpreadsheetExcelService.php index f454ddb8..ae8e4636 100644 --- a/crmeb/services/SpreadsheetExcelService.php +++ b/crmeb/services/SpreadsheetExcelService.php @@ -44,19 +44,19 @@ class SpreadsheetExcelService protected static $colum = 3; //设置style private static $styleArray = [ -// 'borders' => [ -// 'allBorders' => [ -// // PHPExcel_Style_Border里面有很多属性,想要其他的自己去看 -// // 'style' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,//边框是粗的 -// // 'style' => \PHPExcel_Style_Border::BORDER_DOUBLE,//双重的 -// // 'style' => \PHPExcel_Style_Border::BORDER_HAIR,//虚线 -// // 'style' => \PHPExcel_Style_Border::BORDER_MEDIUM,//实粗线 -// // 'style' => \PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT,//虚粗线 -// // 'style' => \PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT,//点虚粗线 -// 'style' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,//细边框 -// // 'color' => ['argb' => 'FFFF0000'], -// ], -// ], + // 'borders' => [ + // 'allBorders' => [ + // // PHPExcel_Style_Border里面有很多属性,想要其他的自己去看 + // // 'style' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,//边框是粗的 + // // 'style' => \PHPExcel_Style_Border::BORDER_DOUBLE,//双重的 + // // 'style' => \PHPExcel_Style_Border::BORDER_HAIR,//虚线 + // // 'style' => \PHPExcel_Style_Border::BORDER_MEDIUM,//实粗线 + // // 'style' => \PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT,//虚粗线 + // // 'style' => \PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT,//点虚粗线 + // 'style' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,//细边框 + // // 'color' => ['argb' => 'FFFF0000'], + // ], + // ], 'font' => [ 'bold' => true ], @@ -66,9 +66,13 @@ class SpreadsheetExcelService ] ]; - private function __construct(){} + private function __construct() + { + } - private function __clone(){} + private function __clone() + { + } public static function instance() { @@ -81,9 +85,9 @@ class SpreadsheetExcelService public function createOrActive($i = null) { - if($i){ + if ($i) { self::$sheet = self::$spreadsheet->createSheet(); - }else{ + } else { self::$sheet = self::$spreadsheet->getActiveSheet(); } return $this; @@ -104,21 +108,21 @@ class SpreadsheetExcelService */ public static function savePath() { - if(!is_dir(self::$path)){ + if (!is_dir(self::$path)) { if (mkdir(self::$path, 0700) == false) { return false; } } //年月一级目录 - $mont_path = self::$path.date('Ym'); - if(!is_dir($mont_path)){ + $mont_path = self::$path . date('Ym'); + if (!is_dir($mont_path)) { if (mkdir($mont_path, 0700) == false) { return false; } } //日二级目录 - $day_path = $mont_path.'/'.date('d'); - if(!is_dir($day_path)){ + $day_path = $mont_path . '/' . date('d'); + if (!is_dir($day_path)) { if (mkdir($day_path, 0700) == false) { return false; } @@ -163,16 +167,16 @@ class SpreadsheetExcelService self::$sheet->getStyle('A1')->getFont()->setBold(true); self::$sheet->getStyle('A1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); //设置左对齐 - if(isset($data['mark']) && !empty($data['mark'])){ - foreach ($data['mark'] as $k => $v){ + if (isset($data['mark']) && !empty($data['mark'])) { + foreach ($data['mark'] as $k => $v) { $i = $k + 2; - self::$sheet->mergeCells('A'.$i.':' . self::$cells . $i); - self::$sheet->setCellValue('A'.$i, $v); + self::$sheet->mergeCells('A' . $i . ':' . self::$cells . $i); + self::$sheet->setCellValue('A' . $i, $v); - self::$sheet->getStyle('A'.$i)->getFont()->setName('宋体'); - self::$sheet->getStyle('A'.$i)->getFont()->setSize(16); - self::$sheet->getStyle('A'.$i)->getFont()->setBold(true); - self::$sheet->getStyle('A'.$i)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT); + self::$sheet->getStyle('A' . $i)->getFont()->setName('宋体'); + self::$sheet->getStyle('A' . $i)->getFont()->setSize(16); + self::$sheet->getStyle('A' . $i)->getFont()->setBold(true); + self::$sheet->getStyle('A' . $i)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT); } } @@ -213,19 +217,19 @@ class SpreadsheetExcelService * @param $data array * @return $this */ - public function setExcelHeader($data,$topNumber) + public function setExcelHeader($data, $topNumber) { $span = 'A'; self::$topNumber = $topNumber; foreach ($data as $key => $value) { self::$sheet->getColumnDimension($span)->setWidth(self::$width); - self::$sheet->setCellValue($span.self::$topNumber, $value); - self::$sheet->getStyle($span.self::$topNumber)->getFont()->setSize(16); + self::$sheet->setCellValue($span . self::$topNumber, $value); + self::$sheet->getStyle($span . self::$topNumber)->getFont()->setSize(16); $span++; } - $span = chr(ord($span) -1); + $span = chr(ord($span) - 1); self::$sheet->getRowDimension(self::$topNumber)->setRowHeight(25); - self::$sheet->getStyle('A1:' . $span.self::$topNumber)->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + self::$sheet->getStyle('A1:' . $span . self::$topNumber)->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); self::$cells = $span; return $this; @@ -241,7 +245,7 @@ class SpreadsheetExcelService public function setExcelContent($data = []) { if (!empty($data) && is_array($data)) { - $column = self::$topNumber+1; + $column = self::$topNumber + 1; // 行写入 foreach ($data as $key => $rows) { $span = 'A'; @@ -252,33 +256,33 @@ class SpreadsheetExcelService } $column++; } - $span = chr(ord($span) -1); + $span = chr(ord($span) - 1); self::$colum = $column; self::$sheet->getDefaultRowDimension()->setRowHeight(self::$height); //设置内容字体样式 - self::$sheet->getStyle('A'.self::$topNumber .':'. $span.$column)->applyFromArray(self::$styleArray); + self::$sheet->getStyle('A' . self::$topNumber . ':' . $span . $column)->applyFromArray(self::$styleArray); //设置边框 - self::$sheet->getStyle('A1:' . $span.$column )->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + self::$sheet->getStyle('A1:' . $span . $column)->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); //设置自动换行 - self::$sheet->getStyle('A4:' . $span.$column)->getAlignment()->setWrapText(true); + self::$sheet->getStyle('A4:' . $span . $column)->getAlignment()->setWrapText(true); } return $this; } public function setExcelEnd(array $data) { - if(!empty($data)){ - foreach ($data as $key => $value){ - $i = self::$colum + $key ; - self::$sheet->mergeCells('A'.$i.':' . self::$cells.$i); - self::$sheet->setCellValue('A'.$i, $value); + if (!empty($data)) { + foreach ($data as $key => $value) { + $i = self::$colum + $key; + self::$sheet->mergeCells('A' . $i . ':' . self::$cells . $i); + self::$sheet->setCellValue('A' . $i, $value); - self::$sheet->getStyle('A'.$i)->getFont()->setName('宋体'); - self::$sheet->getStyle('A'.$i)->getFont()->setSize(16); - self::$sheet->getStyle('A'.$i)->getFont()->setBold(true); - self::$sheet->getStyle('A'.$i)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT); + self::$sheet->getStyle('A' . $i)->getFont()->setName('宋体'); + self::$sheet->getStyle('A' . $i)->getFont()->setSize(16); + self::$sheet->getStyle('A' . $i)->getFont()->setBold(true); + self::$sheet->getStyle('A' . $i)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT); } - self::$sheet->getStyle('A1:' .self::$cells.$i)->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); + self::$sheet->getStyle('A1:' . self::$cells . $i)->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); } return $this; } @@ -291,21 +295,21 @@ class SpreadsheetExcelService * @param $path 是否保存文件文件 * @return 保存文件:return string */ - public function excelSave($fileName = '',$suffix = 'xlsx',$path) + public function excelSave($fileName = '', $suffix = 'xlsx', $path) { - if(empty($fileName)) $fileName = date('YmdHis').time(); - if(empty($suffix)) $suffix = 'xlsx'; + if (empty($fileName)) $fileName = date('YmdHis') . time(); + if (empty($suffix)) $suffix = 'xlsx'; // 重命名表(UTF8编码不需要这一步) if (mb_detect_encoding($fileName) != "UTF-8") $fileName = iconv("utf-8", "gbk//IGNORE", $fileName); - $save_path = self::$path.$path; - $root_path = app()->getRootPath().'public/'.$save_path; - if(!is_dir($root_path)) mkdir($root_path, 0755,true); + $save_path = self::$path . $path; + $root_path = app()->getRootPath() . 'public/' . $save_path; + if (!is_dir($root_path)) mkdir($root_path, 0755, true); $spreadsheet = self::$spreadsheet; $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); - $writer->save($root_path.'/'.$fileName.'.'.$suffix); + $writer->save($root_path . '/' . $fileName . '.' . $suffix); - return $save_path.'/'.$fileName.'.'.$suffix; + return $save_path . '/' . $fileName . '.' . $suffix; } /** @@ -318,9 +322,9 @@ class SpreadsheetExcelService * @author Qinii * @day 3/15/21 */ - public function _import($filePath,array $sql,$where = [],$startRow = 1) + public function _import($filePath, array $sql, $where = [], $startRow = 1) { - if(!file_exists($filePath)) return ; + if (!file_exists($filePath)) return; $ext = ucfirst(pathinfo($filePath, PATHINFO_EXTENSION)); $ret = []; if (in_array($ext, ['Xlsx', 'Xls'])) { @@ -328,16 +332,16 @@ class SpreadsheetExcelService $reader->setReadDataOnly(true); $spreadsheet = $reader->load($filePath); $sheet = $spreadsheet->getActiveSheet(); - $row_count = $sheet->getHighestDataRow();//取得总行数 + $row_count = $sheet->getHighestDataRow(); //取得总行数 for ($row = $startRow; $row <= $row_count; $row++) { $con = []; $item = []; $one = []; -// $getK = $sheet->getCell('A'.$row)->getValue(); -// if ($getK) { -// $getV = $sheet->getCell('B'.$row)->getValue(); -// $one[] = [$getK => $getV]; -// } + // $getK = $sheet->getCell('A'.$row)->getValue(); + // if ($getK) { + // $getV = $sheet->getCell('B'.$row)->getValue(); + // $one[] = [$getK => $getV]; + // } if (!empty($where)) { foreach ($where as $k => $v) { $con_value = $sheet->getCell($v . $row)->getValue(); @@ -369,26 +373,29 @@ class SpreadsheetExcelService * @author Qinii * @day 5/7/21 */ - public function checkImport($filePath,$check = [],$is_limit=false,$count=1000) + public function checkImport($filePath, $check = [], $is_limit = false, $count = 1000) { - $ext = ucfirst(pathinfo($filePath, PATHINFO_EXTENSION)); - $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($ext); - $spreadsheet = $reader->load($filePath); - $sheet = $spreadsheet->getActiveSheet(); - if($is_limit==true){ - $limit=$sheet->getHighestRow(); - if($limit>$count){ - throw new ValidateException('导入的条数超过限制数量:'.$count.',当前表格数量'.$limit); + try { + $ext = ucfirst(pathinfo($filePath, PATHINFO_EXTENSION)); + $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($ext); + $spreadsheet = $reader->load($filePath); + $sheet = $spreadsheet->getActiveSheet(); + if ($is_limit == true) { + $limit = $sheet->getHighestRow(); + if ($limit > $count) { + throw new ValidateException('导入的条数超过限制数量:' . $count . ',当前表格数量' . $limit); + } } - } - if(!empty($check)){ - foreach ($check as $s => $c){ - $_c = $sheet->getCell($s)->getValue(); - if($_c !== $c) throw new ValidateException('表格"'.$s.'"不是"'.$c.'"不可导入'); + if (!empty($check)) { + foreach ($check as $s => $c) { + $_c = $sheet->getCell($s)->getValue(); + if ($_c !== $c) throw new ValidateException('表格"' . $s . '"不是"' . $c . '"不可导入'); + } } + } catch (\Exception $e) { + throw new ValidateException('表格中有无法解析的编码,请重新设置表格'); } return true; } - }