songxingwei 2 năm trước cách đây
mục cha
commit
73f82f3b22

+ 0 - 19
application/admin/controller/Queue.php

@@ -142,25 +142,6 @@ class Queue extends Controller
         }
         try {
 
-            ini_set ("memory_limit","-1");
-            $objPHPExcel= \PHPExcel_IOFactory::load($import_path);
-            $currentSheet=$objPHPExcel->getSheet(0);//当前页
-            $row_num=$currentSheet->getHighestRow();//当前页行数www.zzarea.com
-            $col_max=$currentSheet->getHighestColumn();//当前页最大列号
-            //循环从第二行开始,第一行往往是表头
-            for($i=2;$i<=$row_num;$i++)
-            {
-                $cell_values=array();
-                $cell_values['name']=$currentSheet->getCell("B".$i)->getFormattedValue();
-                $cell_values['dm']=$currentSheet->getCell("F".$i)->getFormattedValue();
-                $cell_values['gb_time']=$currentSheet->getCell("R".$i)->getFormattedValue();
-                //看看数据
-                print_r($cell_values);
-                die;
-            }
-            die;
-
-
             $result = sysqueue($ordfilename, ImportTable2Queue::URI, 0, ['type' => 2,'local_url'=>$import_path,'import_name'=>$username], 0);
             if ($result['status']){
                 sysoplog('上传记录', '上传表二数据成功');

+ 21 - 21
application/service/queue/ImportTable2Queue.php

@@ -50,24 +50,23 @@ class ImportTable2Queue
                 ->limit(1)
                 ->find();
             $import_path = $info['local_url'];
-            $inputFileType = \PHPExcel_IOFactory::identify($import_path);
-            $objReader = \PHPExcel_IOFactory::createReader($inputFileType);
-            $worksheetNames = $objReader->listWorksheetNames($import_path);
-            #只读取表格数据,忽略里面的各种格式,否则会内存耗尽
-            $objReader->setReadDataOnly(TRUE);
-            $objReader->setLoadSheetsOnly($worksheetNames[0]);#笔者此处加载第11个sheet
-            $objPHPExcels = $objReader->load($import_path);
-            $maxCol = $objPHPExcels->getSheet(0)->getHighestColumn();#总列数
-            $maxRow = $objPHPExcels->getSheet(0)->getHighestRow();#总行数
+            $objPHPExcel= \PHPExcel_IOFactory::load($import_path);
+            $currentSheet=$objPHPExcel->getSheet(0);//当前页
+            //$maxCol = $objPHPExcel->getSheet(0)->getHighestColumn();#总列数
+            $maxRow = $objPHPExcel->getSheet(0)->getHighestRow();#总行数
             Db::name('system_queue')->where('id',$info['id'])->update(['maxrow'=>($maxRow-1)]);
             $kd_array = Db::name('system_kd')->column('name');
-            for ($i = 2; $i <= $maxRow; $i++) {
+            //循环从第二行开始,第一行往往是表头
+            for($i=2;$i<=$maxRow;$i++)
+            {
                 $a = [];
-                $infos = $objPHPExcels->getSheet(0)->rangeToArray('A' . $i . ':' . $maxCol . $i)[0];#读取一行
-                if (gettype($infos[17])=='double'){
-                    $infos[17] = gmdate("Y-m-d H:i:s", \PHPExcel_Shared_Date::ExcelToPHP($infos[17]));
+                $name =$currentSheet->getCell("B".$i)->getFormattedValue();
+                $dm=$currentSheet->getCell("F".$i)->getFormattedValue();
+                $gb_time=$currentSheet->getCell("R".$i)->getFormattedValue();
+                if (gettype($gb_time)=='double'){
+                    $gb_time = gmdate("Y-m-d H:i:s", \PHPExcel_Shared_Date::ExcelToPHP($gb_time));
                 }
-                $date = date('Y-m-d',strtotime($infos[17]));
+                $date = date('Y-m-d',strtotime($gb_time));
                 if ($i==2){
                     Db::name('system_queue')->where('id',$info['id'])->update(['date'=>$date]);
                     $is = Db::name('system_table2')->where('date',$date)->count();
@@ -80,16 +79,17 @@ class ImportTable2Queue
                         die;
                     }
                 }
-                if (!in_array($infos[1],$kd_array)){
-                    if (!empty($infos[1])){
-                        array_push($kd_array,$infos[1]);
-                        Db::name('system_kd')->insert(['name'=>$infos[1]]);
+
+                if (!in_array($name,$kd_array)){
+                    if (!empty($name)){
+                        array_push($kd_array,$name);
+                        Db::name('system_kd')->insert(['name'=>$name]);
                     }
                 }
                 $a['import_log_id'] = $info['id'];
-                $a['name'] = $infos[1];
-                $a['dm'] = $infos[5];
-                $a['gb_time'] = $infos[17];
+                $a['name'] = $name;
+                $a['dm'] = $dm;
+                $a['gb_time'] = $gb_time;
                 $a['date'] = $date;
                 Db::name('system_table2')->insert($a);
                 Db::name('system_queue')->where('id',$info['id'])->setInc('deal_count');

+ 133 - 0
application/service/queue/ImportTable2beifenQueue.php

@@ -0,0 +1,133 @@
+<?php
+
+// +----------------------------------------------------------------------
+// | ThinkAdmin
+// +----------------------------------------------------------------------
+// | 版权所有 2014~2019 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// +----------------------------------------------------------------------
+// | 官方网站: http://demo.thinkadmin.top
+// +----------------------------------------------------------------------
+// | 开源协议 ( https://mit-license.org )
+// +----------------------------------------------------------------------
+// | gitee 代码仓库:https://gitee.com/zoujingli/ThinkAdmin
+// | github 代码仓库:https://github.com/zoujingli/ThinkAdmin
+// +----------------------------------------------------------------------
+
+namespace app\service\queue;
+
+use think\console\Input;
+use think\console\Output;
+use think\Db;
+
+/**
+ * Class Jobs
+ */
+class ImportTable2Queue
+{
+    /**
+     * 当前类名
+     * @var string
+     */
+    const URI = self::class;
+
+
+    /**
+     * 执行任务
+     * @param Input $input
+     * @param Output $output
+     * @param array $data
+     * @throws \think\exception\PDOException
+     */
+    public function execute(Input $input, Output $output, array $data = [])
+    {
+        try {
+            set_time_limit(0);
+            ini_set ("memory_limit","-1");
+            $info = Db::name('system_queue')
+                ->where('type',$data['type'])
+                ->where('import_name',$data['import_name'])
+                ->order('id desc')
+                ->limit(1)
+                ->find();
+            $import_path = $info['local_url'];
+            $inputFileType = \PHPExcel_IOFactory::identify($import_path);
+            $objReader = \PHPExcel_IOFactory::createReader($inputFileType);
+            $worksheetNames = $objReader->listWorksheetNames($import_path);
+            #只读取表格数据,忽略里面的各种格式,否则会内存耗尽
+            $objReader->setReadDataOnly(TRUE);
+            $objReader->setLoadSheetsOnly($worksheetNames[0]);#笔者此处加载第11个sheet
+            $objPHPExcels = $objReader->load($import_path);
+            $maxCol = $objPHPExcels->getSheet(0)->getHighestColumn();#总列数
+            $maxRow = $objPHPExcels->getSheet(0)->getHighestRow();#总行数
+            Db::name('system_queue')->where('id',$info['id'])->update(['maxrow'=>($maxRow-1)]);
+            $kd_array = Db::name('system_kd')->column('name');
+            for ($i = 2; $i <= $maxRow; $i++) {
+                $a = [];
+                $infos = $objPHPExcels->getSheet(0)->rangeToArray('A' . $i . ':' . $maxCol . $i)[0];#读取一行
+                if (gettype($infos[17])=='double'){
+                    $infos[17] = gmdate("Y-m-d H:i:s", \PHPExcel_Shared_Date::ExcelToPHP($infos[17]));
+                }
+                $date = date('Y-m-d',strtotime($infos[17]));
+                if ($i==2){
+                    Db::name('system_queue')->where('id',$info['id'])->update(['date'=>$date]);
+                    $is = Db::name('system_table2')->where('date',$date)->count();
+                    if ($is){
+                        Db::name('system_queue')->where('id',$info['id'])->update(
+                            [
+                                'status' => 4, 'end_at' => date('Y-m-d H:i:s'), 'desc' => '表中日期'.$date.'数据已存在,无法导入',
+                            ]
+                        );
+                        die;
+                    }
+                }
+                if (!in_array($infos[1],$kd_array)){
+                    if (!empty($infos[1])){
+                        array_push($kd_array,$infos[1]);
+                        Db::name('system_kd')->insert(['name'=>$infos[1]]);
+                    }
+                }
+                $a['import_log_id'] = $info['id'];
+                $a['name'] = $infos[1];
+                $a['dm'] = $infos[5];
+                $a['gb_time'] = $infos[17];
+                $a['date'] = $date;
+                Db::name('system_table2')->insert($a);
+                Db::name('system_queue')->where('id',$info['id'])->setInc('deal_count');
+            }
+
+            $names = Db::name('system_table2')->where('import_log_id',$info['id'])->where('name','neq','')->group('name')->column('name');
+            if ($names){
+                $insert_array = array();
+                foreach ($names as &$v){
+                    $b = array();
+                    $b['import_log_id'] = $info['id'];
+                    $b['name'] = $v;
+                    $b['value'] = Db::name('system_table2')->where('import_log_id',$info['id'])->where('name',$v)->count();
+                    $b['date'] = Db::name('system_table2')->where('import_log_id',$info['id'])->where('name',$v)->order('id asc')
+                        ->limit(1)->value('date');
+                    array_push($insert_array,$b);
+                }
+                Db::name('system_values2')->insertAll($insert_array);
+            }
+
+            $dms = Db::name('system_table2')->where('import_log_id',$info['id'])->whereNotNull('dm')->group('dm')->column('dm');
+            if ($dms){
+                $insertarray = array();
+                foreach ($dms as &$v){
+                    $c = array();
+                    $c['import_log_id'] = $info['id'];
+                    $c['name'] = Db::name('system_table2')->where('import_log_id',$info['id'])->where('dm',$v)->value('name');
+                    $c['dm'] = $v;
+                    $c['value'] = Db::name('system_table2')->where('import_log_id',$info['id'])->where('dm',$v)->count();
+                    $c['date'] = Db::name('system_table2')->where('import_log_id',$info['id'])->where('dm',$v)->order('id asc')->limit(1)->value('date');
+                    array_push($insertarray,$c);
+                }
+                Db::name('system_values3')->insertAll($insertarray);
+            }
+        }catch (\think\exception\ValidateException $e) {
+            file_put_contents("error2.txt", $e. "\n" . "\n", FILE_APPEND);
+        }
+
+    }
+
+}