浏览代码

后台砸金蛋修改

lizhen_gitee 1 年之前
父节点
当前提交
15b8672f5d

+ 101 - 2
application/admin/controller/egg/Gift.php

@@ -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();
     }
     }
 
 
     /**
     /**

+ 3 - 3
application/admin/controller/egg/Jackpot.php

@@ -5,13 +5,13 @@ namespace app\admin\controller\egg;
 use app\common\controller\Backend;
 use app\common\controller\Backend;
 
 
 /**
 /**
- * 
+ *
  *
  *
  * @icon fa fa-circle-o
  * @icon fa fa-circle-o
  */
  */
 class Jackpot extends Backend
 class Jackpot extends Backend
 {
 {
-    
+
     /**
     /**
      * Jackpot模型对象
      * Jackpot模型对象
      * @var \app\admin\model\egg\Jackpot
      * @var \app\admin\model\egg\Jackpot
@@ -35,6 +35,6 @@ class Jackpot extends Backend
      * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
      * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
      * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
      * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
      */
      */
-    
+
 
 
 }
 }

+ 5 - 5
application/admin/model/egg/Gift.php

@@ -8,13 +8,13 @@ use think\Model;
 class Gift extends Model
 class Gift extends Model
 {
 {
 
 
-    
 
 
-    
+
+
 
 
     // 表名
     // 表名
     protected $name = 'egg_gift';
     protected $name = 'egg_gift';
-    
+
     // 自动写入时间戳字段
     // 自动写入时间戳字段
     protected $autoWriteTimestamp = false;
     protected $autoWriteTimestamp = false;
 
 
@@ -27,9 +27,9 @@ class Gift extends Model
     protected $append = [
     protected $append = [
         'is_use_text'
         'is_use_text'
     ];
     ];
-    
 
 
-    
+
+
     public function getIsUseList()
     public function getIsUseList()
     {
     {
         return ['1' => __('Is_use 1'), '0' => __('Is_use 0')];
         return ['1' => __('Is_use 1'), '0' => __('Is_use 0')];

+ 5 - 5
application/admin/model/egg/Jackpot.php

@@ -8,13 +8,13 @@ use think\Model;
 class Jackpot extends Model
 class Jackpot extends Model
 {
 {
 
 
-    
 
 
-    
+
+
 
 
     // 表名
     // 表名
     protected $name = 'egg_jackpot';
     protected $name = 'egg_jackpot';
-    
+
     // 自动写入时间戳字段
     // 自动写入时间戳字段
     protected $autoWriteTimestamp = false;
     protected $autoWriteTimestamp = false;
 
 
@@ -27,9 +27,9 @@ class Jackpot extends Model
     protected $append = [
     protected $append = [
 
 
     ];
     ];
-    
 
 
-    
+
+