فهرست منبع

Merge branch 'master' into runball

* master:
  支持单文件管理多配置
  save
王虎 7 سال پیش
والد
کامیت
dfe83ce14b

+ 1 - 1
default-script.php

@@ -10,7 +10,7 @@ $typeLine = 3;
 // 数据对应的行数(1开始)
 $dataLine = 4;
 // 键值对应的列(1开始)
-$keyColumn = 'id';
+$keyColumn = '';
 // 哪些字段被导出以及导出的类型
 // 空表示全部导出, 不为空表示导出指定的字段
 // eg: "id" => "number",  字段名 => 类型, 类型支持: number float string json

+ 44 - 15
dump.php

@@ -169,24 +169,47 @@ class Dump
      */
     private function dump($fileInfo)
     {
+        // 源文件
+        $file = $this->sourceDir . self::$DS . $fileInfo['basename'];
+
+        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
+        $reader->setReadDataOnly(true);
+        $spreadsheet = $reader->load($file);
+        // 读取所有sheet
+        $sheetList = $spreadsheet->getSheetNames();
+        foreach ($sheetList as $index => $sheetName) {
+            $sourceData = $spreadsheet->getSheet($index)->toArray();
+            $this->dumpSheet($fileInfo['basename'], $sheetName, $sourceData);
+        }
+    }
+
+    /**
+     * 导出sheet中的数据
+     * @param string $fileName  文件名
+     * @param string $sheetName sheet名
+     * @param array $sourceData
+     * @return boolean
+     */
+    private function dumpSheet($fileName, $sheetName, $sourceData)
+    {
+
         // 找到文件对应的执行脚本
         // 如果找不到, 则使用默认的配置
-        $script = $this->scriptDir . self::$DS . $fileInfo['filename'] . '.php';
+        $script = $this->scriptDir . self::$DS . $sheetName . '.php';
         if (!file_exists($script)) {
-            vd(sprintf('[%s]对应的脚本文件不存在, 脚本文件:%s', $fileInfo['basename'], $script));
+            vd(sprintf('[%s][%s]对应的脚本文件不存在, 脚本文件:%s', $fileName, $sheetName, $script));
             //            return false;
 
             $script = $this->defaultConfigFile;
-            vd(sprintf('[%s]使用默认配置, 脚本文件:%s', $fileInfo['basename'], $script));
+            vd(sprintf('[%s][%s]使用默认配置, 脚本文件:%s', $fileName, $sheetName, $script));
         }
 
         // 引入脚本
         include $script;
 
-        // 读取excel文件内容
-        $sourceData = $this->getDataFromSource($this->sourceDir . self::$DS . $fileInfo['basename']);
+        // 处理excel文件内容
         if (count($sourceData) < $dataLine) {
-            vd(sprintf('[%s]文件没有数据', $fileInfo['basename']));
+            vd(sprintf('[%s][%s]文件没有数据', $fileName, $sheetName));
             return false;
         }
 
@@ -212,6 +235,11 @@ class Dump
             }
         }
 
+        // 主键列
+        if (!$keyColumn) {
+            $keyColumn = current($sourceData[$columnLine - 1]);
+        }
+
         // 普通处理逻辑
         $data = [];
         foreach ($sourceData as $k => $v) {
@@ -248,22 +276,19 @@ class Dump
         }
 
         // 额外处理逻辑
-        $handle = $fileInfo['filename'] . '_handle';
+        $handle = $sheetName . '_handle';
         if (function_exists($handle)) {
             $data = $handle($data);
         }
 
         // 写入PHP文件
-        $this->writePHP($fileInfo['filename'], $data);
+        $this->writePHP($sheetName, $data);
 
         // 生成json文件
-        $this->writeJSON($fileInfo['filename'], $data);
+        $this->writeJSON($sheetName, $data);
 
         // 生成model文件
-        $this->writeModel($fileInfo['filename'], $clientColumns);
-
-
-        return true;
+        $this->writeModel($sheetName, $clientColumns);
     }
 
     /**
@@ -273,9 +298,13 @@ class Dump
     private function getDataFromSource($file)
     {
         $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
-        $reader->setReadDataOnly(['Sheet 1']);
+//        $reader->setReadDataOnly(['Sheet 1']);
+        $reader->setReadDataOnly(true);
         $spreadsheet = $reader->load($file);
-        $data        = $spreadsheet->getActiveSheet()->toArray();
+//         $data        = $spreadsheet->getActiveSheet()->toArray();
+        $data = $spreadsheet->getSheet(5)->toArray();
+
+        vde($data);
         return $data;
     }
 

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
projects/test/json/item_copy.json


+ 67 - 0
projects/test/model/Item_copy.php

@@ -0,0 +1,67 @@
+<?php
+
+class Item_copy
+{
+    /**
+     * Returns table name mapped in the model.
+     *
+     * @return string
+     */
+    public static function getSource()
+    {
+        return 'item_copy';
+    }
+
+    /**
+     * 获取导出给客户端所需要的字段
+     *
+     * @return array
+     */
+    public static function getToClientColumns()
+    {
+         return [];
+    }
+
+    /**
+     * 生成客户端需要的字段, 生成列表
+     *
+     * @return array
+     */
+    public static function getListForClient()
+    {
+        $data = [];
+        if (empty(self::getToClientColumns())) {
+            $data = array_values(self::getList());
+        } else {
+            foreach (self::getList() as $key => $value) {
+                foreach ($value as $k => $v) {
+                    if (!in_array($k, self::getToClientColumns())) {
+                        unset($value[$k]);
+                    }
+                }
+                $data[] = $value;
+            }
+        }
+        return $data;
+    }
+
+    /**
+     * 获取单条配置内容
+     *
+     * @return array
+     */
+    public static function get($configId)
+    {
+        return IConfig::get()->loadAppConfig(self::getSource(), $configId);
+    }
+
+    /**
+     * 获取所有配置
+     *
+     * @return array
+     */
+    public static function getList()
+    {
+        return IConfig::get()->loadAppConfig(self::getSource());
+    }
+}

+ 264 - 0
projects/test/output/item_copy.config.php

@@ -0,0 +1,264 @@
+<?php
+return array (
+  1001 => 
+  array (
+    'item_id2' => 1001,
+    'item_name2' => '玻尿酸鸭',
+    'icon2' => '1001.png',
+    'size2' => 30.0,
+    'purchase_price2' => 14.3,
+    'stock2' => 100,
+    'place2' => 
+    array (
+      1 => 1,
+      2 => 2,
+    ),
+  ),
+  1002 => 
+  array (
+    'item_id2' => 1002,
+    'item_name2' => 'line布朗熊',
+    'icon2' => '1002.png',
+    'size2' => 20.0,
+    'purchase_price2' => 4.5,
+    'stock2' => 100,
+    'place2' => 
+    array (
+      0 => 1,
+      1 => 2,
+      2 => 3,
+      3 => 4,
+      4 => 5,
+    ),
+  ),
+  1003 => 
+  array (
+    'item_id2' => 1003,
+    'item_name2' => 'line可妮兔',
+    'icon2' => '1003.png',
+    'size2' => 20.0,
+    'purchase_price2' => 4.5,
+    'stock2' => 100,
+    'place2' => 
+    array (
+      0 => 'a',
+      1 => 'b',
+      2 => 'c',
+    ),
+  ),
+  1004 => 
+  array (
+    'item_id2' => 1004,
+    'item_name2' => '可莱丝补水保湿面膜',
+    'icon2' => '1004.png',
+    'size2' => 8.0,
+    'purchase_price2' => 5.5,
+    'stock2' => 200,
+    'place2' => 
+    array (
+      1 => 1,
+      2 => 2,
+    ),
+  ),
+  1005 => 
+  array (
+    'item_id2' => 1005,
+    'item_name2' => '懒蛋蛋呕吐蛋黄君',
+    'icon2' => '1005.png',
+    'size2' => 5.0,
+    'purchase_price2' => 1.2,
+    'stock2' => 720,
+    'place2' => 
+    array (
+      0 => 1,
+      1 => 2,
+      2 => 3,
+      3 => 4,
+      4 => 5,
+    ),
+  ),
+  1006 => 
+  array (
+    'item_id2' => 1006,
+    'item_name2' => '拿荷叶龙猫',
+    'icon2' => '1006.png',
+    'size2' => 20.0,
+    'purchase_price2' => 7.2,
+    'stock2' => 100,
+    'place2' => 
+    array (
+      0 => 'a',
+      1 => 'b',
+      2 => 'c',
+    ),
+  ),
+  1007 => 
+  array (
+    'item_id2' => 1007,
+    'item_name2' => '史迪仔挂件',
+    'icon2' => '1007.png',
+    'size2' => 5.5,
+    'purchase_price2' => 2.55,
+    'stock2' => 300,
+    'place2' => 
+    array (
+      1 => 1,
+      2 => 2,
+    ),
+  ),
+  1008 => 
+  array (
+    'item_id2' => 1008,
+    'item_name2' => '史迪仔娃娃',
+    'icon2' => '1008.png',
+    'size2' => 20.0,
+    'purchase_price2' => 4.7,
+    'stock2' => 200,
+    'place2' => 
+    array (
+      0 => 1,
+      1 => 2,
+      2 => 3,
+      3 => 4,
+      4 => 5,
+    ),
+  ),
+  1009 => 
+  array (
+    'item_id2' => 1009,
+    'item_name2' => '粉红豹',
+    'icon2' => '1009.png',
+    'size2' => 25.0,
+    'purchase_price2' => 5.8,
+    'stock2' => 200,
+    'place2' => 
+    array (
+      0 => 'a',
+      1 => 'b',
+      2 => 'c',
+    ),
+  ),
+  1010 => 
+  array (
+    'item_id2' => 1010,
+    'item_name2' => '帽子蒙奇奇',
+    'icon2' => '1010.png',
+    'size2' => 8.0,
+    'purchase_price2' => 5.7,
+    'stock2' => 50,
+    'place2' => 
+    array (
+      1 => 1,
+      2 => 2,
+    ),
+  ),
+  1011 => 
+  array (
+    'item_id2' => 1011,
+    'item_name2' => '西瓜蒙奇奇',
+    'icon2' => '1011.png',
+    'size2' => 8.0,
+    'purchase_price2' => 5.7,
+    'stock2' => 50,
+    'place2' => 
+    array (
+      0 => 1,
+      1 => 2,
+      2 => 3,
+      3 => 4,
+      4 => 5,
+    ),
+  ),
+  1012 => 
+  array (
+    'item_id2' => 1012,
+    'item_name2' => '小鸡蒙奇奇',
+    'icon2' => '1012.png',
+    'size2' => 8.0,
+    'purchase_price2' => 5.7,
+    'stock2' => 50,
+    'place2' => 
+    array (
+      0 => 'a',
+      1 => 'b',
+      2 => 'c',
+    ),
+  ),
+  1013 => 
+  array (
+    'item_id2' => 1013,
+    'item_name2' => '招财猫蒙奇奇',
+    'icon2' => '1013.png',
+    'size2' => 8.0,
+    'purchase_price2' => 5.7,
+    'stock2' => 50,
+    'place2' => 
+    array (
+      1 => 1,
+      2 => 2,
+    ),
+  ),
+  1014 => 
+  array (
+    'item_id2' => 1014,
+    'item_name2' => '黛西沐浴擦',
+    'icon2' => '1014.png',
+    'size2' => 15.0,
+    'purchase_price2' => 5.1,
+    'stock2' => 50,
+    'place2' => 
+    array (
+      0 => 1,
+      1 => 2,
+      2 => 3,
+      3 => 4,
+      4 => 5,
+    ),
+  ),
+  1015 => 
+  array (
+    'item_id2' => 1015,
+    'item_name2' => '美乐蒂沐浴擦',
+    'icon2' => '1015.png',
+    'size2' => 15.0,
+    'purchase_price2' => 5.1,
+    'stock2' => 50,
+    'place2' => 
+    array (
+      0 => 'a',
+      1 => 'b',
+      2 => 'c',
+    ),
+  ),
+  1016 => 
+  array (
+    'item_id2' => 1016,
+    'item_name2' => '唐老鸭沐浴擦',
+    'icon2' => '1016.png',
+    'size2' => 15.0,
+    'purchase_price2' => 5.1,
+    'stock2' => 50,
+    'place2' => 
+    array (
+      1 => 1,
+      2 => 2,
+    ),
+  ),
+  1017 => 
+  array (
+    'item_id2' => 1017,
+    'item_name2' => 'KT沐浴擦',
+    'icon2' => '1017.png',
+    'size2' => 15.0,
+    'purchase_price2' => 5.1,
+    'stock2' => 50,
+    'place2' => 
+    array (
+      0 => 1,
+      1 => 2,
+      2 => 3,
+      3 => 4,
+      4 => 5,
+    ),
+  ),
+);

BIN
projects/test/source/item.xlsx


BIN
projects/test/source/配置表.xlsx