Laravel-EXCEL 上傳Excel表格

<?php
/**
 * Created by PhpStorm.
 * User: xuzhiwen
 * Date: 2019/8/26
 * Time: 16:31
 */

namespace App\Imports;

use App\OdsProdGeneralSkuJd;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithCustomCsvSettings;

class JdSkuImport implements ToModel,WithBatchInserts,WithChunkReading,WithCustomCsvSettings
{
    protected $data_date;

    protected $platform;

    protected $store_code;

    protected $store_name;
    public function __construct($data_date,$platform,$store_code,$store_name)
    {
        $this->data_date =$data_date;
        $this->platform = $platform;
        $this->store_code = $store_code;
        $this->store_name = $store_name;
    }

    public function getCsvSettings(): array
    {
        return [
            'input_encoding' => 'GB2312'
        ];
    }

    public function batchSize(): int
    {
        return 500;
    }

    public function chunkSize(): int
    {
        return 500;
    }

    public function model(array $row)
    {
        $batch = session('batch')??0;
        $rows = session('rows');
        if(empty($rows)){
            //獲取表頭信息
            $rows = array_flip($row);// key value 互換
            $arr = [
                '商品ID',
                '商品名稱',
                '貨號',
                '訪客數',
                '瀏覽量',
                '商品關注數',
                '加購商品件數',
                '加購人數',
                '成交客戶數',
                '成交單量',
                '成交商品件數',
                '成交金額',
                '成交轉化率',
                'UV價值',
                '評價數',
                '最近上架時間',
                '詳情頁跳出率',
                '曝光量',
                '點擊次數',
                '點擊率',
                '系統預測未來7天銷量',
                '下單客戶數',
                '下單商品件數',
                '下單金額',
                '下單成交轉化率',
                '下單轉化率',
                'PV現貨率'
            ];
            $flag = false;
            foreach ($row as $k=>$v){
                $flag = false;
                foreach ($arr as $kk=>$vv){
                    if($vv==$v){
                        $flag = true;
                        break;
                    }
                }
                if(!$flag){
                    break;
                }
            }
            if(!$flag) {
                throw new \Exception('excel表格頭部沒有對應的信息');
            }
            session(['rows' => $rows]);
            return null;
        }else {
            // 判斷當前日期是第一次導入,先刪除重複的數據
            $data_Date = $this->data_date;
            $del = session('del');
            if(empty($del) || !in_array($data_Date,$del)) {
                OdsProdGeneralSkuJd::query()->where('data_date',$data_Date)->delete();
                $del = session('del') ?? [];
                array_push($del, $data_Date);
                session(['del' => $del]);
            }
            if($batch ==0 ){
                session(['batch'=>'-1']);
                return null;
            }
            if($batch=='-1') {
                session(['batch' => 1]);
            }else{
                $batch = $batch + 1;
                session(['batch'=>$batch]);
            }


            return new OdsProdGeneralSkuJd([
                'platform'=>$this->platform,
                'store_name'=>$this->store_name,
                'store_code'=>$this->store_code,
                'data_date'=>$this->data_date,
                'prod_id'=>Q($row,Q($rows,'商品ID')),//商品ID
                'prod_name'=>Q($row,Q($rows,'商品名稱')),//商品名稱
                'prod_no'=>Q($row,Q($rows,'貨號')),//貨號
                'uv'=>Q($row,Q($rows,'訪客數')),//訪客數
                'pv'=>Q($row,Q($rows,'瀏覽量')),//瀏覽量
                'prod_attent_num'=>Q($row,Q($rows,'商品關注數')),//商品關注數
                'atc_items'=>Q($row,Q($rows,'加購商品件數')),//加購商品件數
                'atc_custs'=>Q($row,Q($rows,'加購人數')),//加購人數
                'pay_custs'=>Q($row,Q($rows,'成交客戶數')),//成交客戶數
                'pay_orders'=>Q($row,Q($rows,'成交單量')),//成交單量
                'pay_items'=>Q($row,Q($rows,'成交商品件數')),//成交商品件數
                'pay_amount'=>Q($row,Q($rows,'成交金額')),//成交金額
                'pay_cr'=>Q($row,Q($rows,'成交轉化率')),//成交轉化率
                'uv_value'=>Q($row,Q($rows,'UV價值')),//UV價值
                'evaluate_num'=>Q($row,Q($rows,'評價數')),//評價數
                'last_onshelf_date'=>Q($row,Q($rows,'最近上架時間'))=='  '?null:Q($row,Q($rows,'最近上架時間')),//最近上架時間
                'detailpage_br'=>Q($row,Q($rows,'詳情頁跳出率')),//詳情頁跳出率
                'exposure_num'=>Q($row,Q($rows,'曝光量')),//曝光量
                'click_num'=>Q($row,Q($rows,'點擊次數')),//點擊次數
                'click_cr'=>Q($row,Q($rows,'點擊率')),//點擊率
                'pay_num_n7d'=>Q($row,Q($rows,'系統預測未來7天銷量')),//系統預測未來7天銷量
                'place_custs'=>Q($row,Q($rows,'下單客戶數')),//下單客戶數
                'place_items'=>Q($row,Q($rows,'下單商品件數')),//下單商品件數
                'place_amount'=>Q($row,Q($rows,'下單金額')),//下單金額
                'place_pay_cr'=>Q($row,Q($rows,'下單成交轉化率')),//下單成交轉化率
                'place_cr'=>Q($row,Q($rows,'下單轉化率')),//下單轉化率
                'pv_sr'=>Q($row,Q($rows,'PV現貨率'))=='-'?0:Q($row,Q($rows,'PV現貨率')),//PV現貨率
            ]);
        }
    }



}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章