|
@@ -3,9 +3,15 @@
|
|
namespace app\admin\controller\egg;
|
|
namespace app\admin\controller\egg;
|
|
|
|
|
|
use app\common\controller\Backend;
|
|
use app\common\controller\Backend;
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Reader\Csv;
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Reader\Xls;
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
|
|
|
|
+use think\Exception;
|
|
|
|
+use think\exception\PDOException;
|
|
|
|
|
|
/**
|
|
/**
|
|
- *
|
|
|
|
|
|
+ *
|
|
*
|
|
*
|
|
* @icon fa fa-circle-o
|
|
* @icon fa fa-circle-o
|
|
*/
|
|
*/
|
|
@@ -27,7 +33,100 @@ class Gift extends Backend
|
|
|
|
|
|
public function import()
|
|
public function import()
|
|
{
|
|
{
|
|
- parent::import();
|
|
|
|
|
|
+ $file = $this->request->request('file');
|
|
|
|
+ if (!$file) {
|
|
|
|
+ $this->error(__('Parameter %s can not be empty', 'file'));
|
|
|
|
+ }
|
|
|
|
+ $filePath = ROOT_PATH . DS . 'public' . DS . $file;
|
|
|
|
+ if (!is_file($filePath)) {
|
|
|
|
+ $this->error(__('No results were found'));
|
|
|
|
+ }
|
|
|
|
+ //实例化reader
|
|
|
|
+ $ext = pathinfo($filePath, PATHINFO_EXTENSION);
|
|
|
|
+ if (!in_array($ext, ['csv', 'xls', 'xlsx'])) {
|
|
|
|
+ $this->error(__('Unknown data format'));
|
|
|
|
+ }
|
|
|
|
+ if ($ext === 'csv') {
|
|
|
|
+ $file = fopen($filePath, 'r');
|
|
|
|
+ $filePath = tempnam(sys_get_temp_dir(), 'import_csv');
|
|
|
|
+ $fp = fopen($filePath, "w");
|
|
|
|
+ $n = 0;
|
|
|
|
+ while ($line = fgets($file)) {
|
|
|
|
+ $line = rtrim($line, "\n\r\0");
|
|
|
|
+ $encoding = mb_detect_encoding($line, ['utf-8', 'gbk', 'latin1', 'big5']);
|
|
|
|
+ if ($encoding != 'utf-8') {
|
|
|
|
+ $line = mb_convert_encoding($line, 'utf-8', $encoding);
|
|
|
|
+ }
|
|
|
|
+ if ($n == 0 || preg_match('/^".*"$/', $line)) {
|
|
|
|
+ fwrite($fp, $line . "\n");
|
|
|
|
+ } else {
|
|
|
|
+ fwrite($fp, '"' . str_replace(['"', ','], ['""', '","'], $line) . "\"\n");
|
|
|
|
+ }
|
|
|
|
+ $n++;
|
|
|
|
+ }
|
|
|
|
+ fclose($file) || fclose($fp);
|
|
|
|
+
|
|
|
|
+ $reader = new Csv();
|
|
|
|
+ } elseif ($ext === 'xls') {
|
|
|
|
+ $reader = new Xls();
|
|
|
|
+ } else {
|
|
|
|
+ $reader = new Xlsx();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //加载文件
|
|
|
|
+ $insert = [];
|
|
|
|
+ try {
|
|
|
|
+ if (!$PHPExcel = $reader->load($filePath)) {
|
|
|
|
+ $this->error(__('Unknown data format'));
|
|
|
|
+ }
|
|
|
|
+ $currentSheet = $PHPExcel->getSheet(0); //读取文件中的第一个工作表
|
|
|
|
+ $allColumn = $currentSheet->getHighestDataColumn(); //取得最大的列号
|
|
|
|
+ $allRow = $currentSheet->getHighestRow(); //取得一共有多少行
|
|
|
|
+ $maxColumnNumber = Coordinate::columnIndexFromString($allColumn);
|
|
|
|
+
|
|
|
|
+ // 获取奖池礼物表最后一条记录的ID
|
|
|
|
+ $lastId = $this->model->order('id','desc')->value('id');
|
|
|
|
+ for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
|
|
|
|
+ $values = [];
|
|
|
|
+ for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) {
|
|
|
|
+ $val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();
|
|
|
|
+ $values[] = is_null($val) ? '' : $val;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $giftInfo = \app\admin\model\gift\Gift::get($values[1]);
|
|
|
|
+ if(!$giftInfo) $this->error('礼物ID:'.$values[1].'未找到对应礼物');
|
|
|
|
+ for ($i = 0;$i<$values[2];$i++){
|
|
|
|
+ $insert[] = [
|
|
|
|
+ 'Jackpot_id' => $values[0],
|
|
|
|
+ 'gift_id' => $values[1],
|
|
|
|
+ 'image' => $giftInfo['image'],
|
|
|
|
+ 'special' => $giftInfo['special'],
|
|
|
|
+ 'gift_name' => $giftInfo['name'],
|
|
|
|
+ 'price' => $giftInfo['price'],
|
|
|
|
+ 'prize_no' => ++$lastId
|
|
|
|
+ ];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception $exception) {
|
|
|
|
+ $this->error($exception->getMessage());
|
|
|
|
+ }
|
|
|
|
+ if (!$insert) {
|
|
|
|
+ $this->error(__('No rows were updated'));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ $this->model->saveAll($insert);
|
|
|
|
+ } catch (PDOException $exception) {
|
|
|
|
+ $msg = $exception->getMessage();
|
|
|
|
+ if (preg_match("/.+Integrity constraint violation: 1062 Duplicate entry '(.+)' for key '(.+)'/is", $msg, $matches)) {
|
|
|
|
+ $msg = "导入失败,包含【{$matches[1]}】的记录已存在";
|
|
|
|
+ };
|
|
|
|
+ $this->error($msg);
|
|
|
|
+ } catch (Exception $e) {
|
|
|
|
+ $this->error($e->getMessage());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $this->success();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|