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现货率
            ]);
        }
    }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值