|
|
@@ -27,6 +27,8 @@ use app\common\{
|
|
|
model\GiftCardInfo};
|
|
|
use app\common\service\FileService;
|
|
|
use app\common\service\GiftCardQrCodeService;
|
|
|
+use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
|
|
|
+
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -34,10 +36,11 @@ use app\common\service\GiftCardQrCodeService;
|
|
|
* Class GoodsLists
|
|
|
* @package app\adminapi\lists\goods
|
|
|
*/
|
|
|
-class GiftCardInfoLists extends BaseAdminDataLists implements ListsExtendInterface,ListsExcelInterface
|
|
|
+class GiftCardInfoLists extends BaseAdminDataLists
|
|
|
{
|
|
|
// ... existing code ...
|
|
|
-
|
|
|
+ use ListsSearchTrait;
|
|
|
+ use ListsExcelTrait;
|
|
|
/**
|
|
|
* 批量生成二维码
|
|
|
* @return array
|
|
|
@@ -108,8 +111,8 @@ class GiftCardInfoLists extends BaseAdminDataLists implements ListsExtendInterfa
|
|
|
*/
|
|
|
public function lists(): array
|
|
|
{
|
|
|
-
|
|
|
- $lists = GiftCardInfo::where($this->setSearch())
|
|
|
+ $field = 'id,gc_id,card_no,card_pass,card_money,is_used,user_id,used_time,create_time,qr_code_path';
|
|
|
+ $lists = GiftCardInfo::field($field)->where($this->setSearch())
|
|
|
->with(['user'])
|
|
|
->append(['is_used_desc','used_user_name','batch_no','qr_code_url'])
|
|
|
->limit($this->limitOffset, $this->limitLength)
|
|
|
@@ -118,7 +121,7 @@ class GiftCardInfoLists extends BaseAdminDataLists implements ListsExtendInterfa
|
|
|
->toArray();
|
|
|
//
|
|
|
foreach ($lists as &$list) {
|
|
|
- $list['qr_code_path'] = 'https://nongfa.sdshengyuekeji.cn/'.$list['qr_code_path'];
|
|
|
+ $list['qr_code_url'] = 'https://nongfa.sdshengyuekeji.cn/'.$list['qr_code_path'];
|
|
|
}
|
|
|
|
|
|
return $lists;
|
|
|
@@ -165,9 +168,159 @@ class GiftCardInfoLists extends BaseAdminDataLists implements ListsExtendInterfa
|
|
|
'used_user_name' => '使用人',
|
|
|
'used_time' => '使用时间',
|
|
|
'create_time'=> '创建时间',
|
|
|
+ 'qr_code_url' => '小程序码', // 添加小程序码字段
|
|
|
];
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @notes 创建包含图片的excel
|
|
|
+ * @param $excelFields
|
|
|
+ * @param $lists
|
|
|
+ * @return string
|
|
|
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
|
|
|
+ * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
|
|
|
+ */
|
|
|
+ public function createExcel($excelFields, $lists)
|
|
|
+ {
|
|
|
+ $title = array_values($excelFields);
|
|
|
+ $letter_column = ['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'];
|
|
|
+
|
|
|
+ $data = [];
|
|
|
+ foreach ($lists as $row) {
|
|
|
+ $temp = [];
|
|
|
+ foreach ($excelFields as $key => $excelField) {
|
|
|
+ $fieldData = $row[$key];
|
|
|
+ if(is_numeric($fieldData) && strlen($fieldData) >= 11){
|
|
|
+ $fieldData.="\t";
|
|
|
+ }
|
|
|
+ $temp[$key] = $fieldData;
|
|
|
+ }
|
|
|
+ $data[] = $temp;
|
|
|
+ }
|
|
|
+
|
|
|
+ $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
|
|
|
+ $sheet = $spreadsheet->getActiveSheet();
|
|
|
+
|
|
|
+ //设置单元格内容
|
|
|
+ foreach ($title as $key => $value) {
|
|
|
+ // 单元格内容写入
|
|
|
+ $sheet->setCellValueByColumnAndRow($key + 1, 1, $value);
|
|
|
+ }
|
|
|
+ //设置行高
|
|
|
+ $spreadsheet->getActiveSheet()->getRowDimension(1)->setRowHeight(25);
|
|
|
+
|
|
|
+ $row = 2; //从第二行开始
|
|
|
+ $qrCodeColumnIndex = array_search('qr_code_url', array_keys($excelFields)); // 获取二维码列的索引
|
|
|
+
|
|
|
+ foreach ($data as $rowIndex => $item) {
|
|
|
+ $column = 1;
|
|
|
+ foreach ($item as $key => $value) {
|
|
|
+ $columnIndex = $column - 1;
|
|
|
+
|
|
|
+ // 如果是二维码列且有URL,插入图片
|
|
|
+ if ($key === 'qr_code_url' && !empty($value)) {
|
|
|
+ try {
|
|
|
+ // 设置单元格为空,为图片腾出空间
|
|
|
+ $sheet->setCellValueByColumnAndRow($column, $row, '');
|
|
|
+
|
|
|
+ // 下载图片到临时文件
|
|
|
+ $imageContent = @file_get_contents($value);
|
|
|
+ if ($imageContent !== false) {
|
|
|
+ $tempFile = sys_get_temp_dir() . '/qr_' . $rowIndex . '_' . time() . '.png';
|
|
|
+ file_put_contents($tempFile, $imageContent);
|
|
|
+
|
|
|
+ // 创建图片对象
|
|
|
+ $drawing = new Drawing();
|
|
|
+ $drawing->setName('QR Code');
|
|
|
+ $drawing->setDescription('小程序码');
|
|
|
+ $drawing->setPath($tempFile);
|
|
|
+ $drawing->setHeight(60); // 设置图片高度
|
|
|
+ $drawing->setWidth(60); // 设置图片宽度
|
|
|
+
|
|
|
+ // 设置图片位置
|
|
|
+ $cellCoordinate = $letter_column[$columnIndex] . $row;
|
|
|
+ $drawing->setCoordinates($cellCoordinate);
|
|
|
+ $drawing->setOffsetX(5); // X轴偏移
|
|
|
+ $drawing->setOffsetY(5); // Y轴偏移
|
|
|
+
|
|
|
+ // 将图片添加到工作表
|
|
|
+ $drawing->setWorksheet($sheet);
|
|
|
+
|
|
|
+ // 设置行高以适应图片
|
|
|
+ $spreadsheet->getActiveSheet()->getRowDimension($row)->setRowHeight(70);
|
|
|
+
|
|
|
+ // 清理临时文件
|
|
|
+ @unlink($tempFile);
|
|
|
+ } else {
|
|
|
+ // 如果图片下载失败,显示URL
|
|
|
+ $sheet->setCellValueByColumnAndRow($column, $row, $value);
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ // 如果图片插入失败,显示URL
|
|
|
+ $sheet->setCellValueByColumnAndRow($column, $row, $value);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 普通文本数据
|
|
|
+ $value = strpos($value, '=') === 0 ? " " . $value : $value;
|
|
|
+ $sheet->setCellValueByColumnAndRow($column, $row, $value);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置列宽
|
|
|
+ $columnWidth = ($key === 'qr_code_url') ? 15 : max([strlen($value) * 1.2, 15]);
|
|
|
+ $spreadsheet->getActiveSheet()->getColumnDimension($letter_column[$columnIndex])->setWidth($columnWidth);
|
|
|
+
|
|
|
+ $column++;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置默认行高
|
|
|
+ if (!isset($qrCodeColumnIndex) || empty($data[$rowIndex]['qr_code_url'])) {
|
|
|
+ $spreadsheet->getActiveSheet()->getRowDimension($row)->setRowHeight(25);
|
|
|
+ }
|
|
|
+
|
|
|
+ $row++;
|
|
|
+ }
|
|
|
+
|
|
|
+ $getHighestRowAndColumn = $sheet->getHighestRowAndColumn();
|
|
|
+ $HighestRow = $getHighestRowAndColumn['row'];
|
|
|
+ $columnLetter = $getHighestRowAndColumn['column'];
|
|
|
+ $titleScope = 'A1:' . $columnLetter . '1';//第一(标题)范围
|
|
|
+
|
|
|
+ // 设置标题样式
|
|
|
+ $sheet->getStyle($titleScope)
|
|
|
+ ->getFill()
|
|
|
+ ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
|
|
|
+ ->getStartColor()
|
|
|
+ ->setARGB('26956d');
|
|
|
+ $sheet->getStyle($titleScope)->getFont()->getColor()
|
|
|
+ ->setARGB('FFFFFF');
|
|
|
+
|
|
|
+ $allScope = 'A1:' . $columnLetter . $HighestRow;
|
|
|
+ // 设置居中对齐
|
|
|
+ $styleArray = [
|
|
|
+ 'alignment' => [
|
|
|
+ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
|
|
|
+ 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
|
|
|
+ ],
|
|
|
+ ];
|
|
|
+ $sheet->getStyle($allScope)->applyFromArray($styleArray);
|
|
|
+
|
|
|
+ // 设置边框
|
|
|
+ $sheet->getStyle($allScope)->getBorders()->getAllBorders()
|
|
|
+ ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
|
+
|
|
|
+ $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
|
|
|
+
|
|
|
+ //创建excel文件
|
|
|
+ $exportCache = new \app\common\cache\ExportCache();
|
|
|
+ $src = $exportCache->getSrc();
|
|
|
+ if (!file_exists($src)) {
|
|
|
+ mkdir($src, 0775, true);
|
|
|
+ }
|
|
|
+ $writer->save($src . $this->fileName);
|
|
|
+
|
|
|
+ //设置本地excel缓存并返回下载地址
|
|
|
+ return (string)(url('index/download/export', ['file' => $exportCache->setFile($this->fileName)], true, true));
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|