| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | 
							- <?php
 
- namespace App\Service;
 
- use App\Exports\MyExport;
 
- use App\Model\Header_ext;
 
- use Illuminate\Support\Facades\Route;
 
- class IOService extends Service
 
- {
 
-     public function apiExport($request){
 
-         list($status,$data) = $this->apiHook($request);
 
-         if($status != 200) return [false,$data];
 
-         $list = $data['data']['data'];
 
-         $data = $request->all();
 
-         $menu_id = $data['menu_id'];
 
-         $head_list = Header_ext::where('menu_id',$menu_id)->where('del_time',0)->get()->toArray();
 
-         $marge = [];
 
-         foreach ($head_list as &$value){
 
-             $positions = explode(':',$value['position']);
 
-             $value['e_words'] = [];
 
-             foreach ($positions as $vv){
 
-                 $value['e_words'][] = $vv;
 
-             }
 
-             if(count($positions) === 2) $marge[] = $value['position'];
 
-         }
 
-         list($head,$max_row) = $this->setHeadEWordChangeNum($head_list);
 
-         //初始化一个列数组
 
-         $init_row = [];
 
-         for ($i=0;$i<$max_row;$i++){
 
-             $init_row[$i] = '';
 
-         }
 
-         //拼所有的表头,先确认每行的表头
 
-         $excel_head  = [];
 
-         $line_max = 0;
 
-         foreach ($head as $v){
 
-             $line = $v['lines'][0]-1;
 
-             $detail = [
 
-                 'key' => $v['key'],
 
-                 'value' => $v['value'],
 
-                 'rows' => $v['rows'],
 
-                 'lines' => $v['lines'],
 
-             ];
 
-             foreach ($v['lines'] as $vv){
 
-                 if($vv > $line_max) $line_max = $vv;
 
-             }
 
-             $excel_head[$line][] = $detail;
 
-         }
 
-         //初始化表头的行
 
-         $excel_data = [];
 
-         for ($i=0;$i<$line_max;$i++){
 
-             $excel_data[$i] = $init_row;
 
-         }
 
-         $key_word = [];
 
-         foreach ($excel_head as $k=>$v){
 
-             foreach ($v as $vv){
 
-                 $row = $vv['rows'][0];
 
-                 if(!empty($vv['key']))  $key_word[$vv['key']] = $row;
 
-                 $excel_data[$k][$row] = $vv['value'];
 
-             }
 
-         }
 
-         foreach ($list as $v){
 
-             $detail = $init_row;
 
-             foreach ($key_word as $key=>$vv){
 
-                 if(isset($v[$key])) $detail[$vv] = $v;
 
-             }
 
-             $excel_data[] = $detail;
 
-         }
 
-         $excel = (new MyExport())->commonExport( [
 
-             'data' => $data,
 
-             'params' => [
 
-                 'merge' => $marge
 
-             ],
 
-         ]);
 
-         return [true,$excel];
 
-     }
 
-     /**
 
-      * 获取具体数据,通过访问页面相同接口
 
-      * @param $request
 
-      * @return array
 
-      */
 
-     public function apiHook($request){
 
-         $data = $request->all();
 
-         $api = $data['api'];
 
-         $route = Route::getRoutes();
 
-         $return = [];
 
-         foreach ($route as $v){
 
-             $uri = $v->uri();
 
-             $action = $v->getAction();
 
-             $return[$uri] = $action['uses'];
 
-         }
 
-         $class = explode('@',$return[$api]);
 
-         $use_name = '\\'.$class[0];
 
-         $example = new $use_name();
 
-         $name = $class[1];
 
-         $return = $example->$name($request);
 
-         return $return;
 
-     }
 
-     /**
 
-      * 将合并定位的excel数据进行处理
 
-      * @param $head
 
-      * @return mixed
 
-      */
 
-     public function setHeadEWordChangeNum($head){
 
-         $max_row = 0;
 
-         foreach ($head as &$v){
 
-             $v['rows'] = [];
 
-             $v['lines'] = [];
 
-             foreach ($v['e_words'] as $vv){
 
-                 preg_match_all('/\d+/', $vv, $matches);
 
-                 $number = $matches[0][0];
 
-                 $v['lines'][] = $number;
 
-                 $row = eWordChangeNum(str_replace($number,'',$vv));
 
-                 $v['rows'][] = $row;
 
-                 if($row>$max_row) $max_row = $row;
 
-             }
 
-         }
 
-         foreach ($head as &$v){
 
-             sort($v['rows']);
 
-             sort($v['lines']);
 
-         }
 
-         return [$head,$max_row];
 
-     }
 
- }
 
 
  |