| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 | <?phpnamespace App\Service;use App\Exports\ExportOrder;use App\Exports\MyExport;use App\Model\Area;use App\Model\BasicMaterial;use App\Model\BasicRollFilm;use App\Model\BasicType;use App\Model\CarDepart;use App\Model\CarFiles;use App\Model\CarType;use App\Model\Company;use App\Model\Construction;use App\Model\ConstructionInfo;use App\Model\ConstructionOrder;use App\Model\ConstructionOrderImg;use App\Model\ConstructionOrderSub;use App\Model\ConstructionProductInfo;use App\Model\Employee;use App\Model\EmployeeDepartPermission;use App\Model\FoursShop;use App\Model\InOutRecord;use App\Model\Inventory;use App\Model\InventorySub;use App\Model\KqList;use App\Model\Material;use App\Model\MaterialCharge;use App\Model\MaterialChargeSub;use App\Model\MaterialOrder;use App\Model\MaterialOrderApply;use App\Model\MaterialOrderIn;use App\Model\MaterialOrderSend;use App\Model\MaterialOrderSendSub;use App\Model\MaterialReturn;use App\Model\MaterialReturnSub;use App\Model\PaymentReceipt;use App\Model\PaymentReceiptInfo;use App\Model\PurchaseOrder;use App\Model\PurchaseOrderInfo;use App\Model\RollFilm;use App\Model\RollFilmCombine;use App\Model\RollFilmCompany;use App\Model\RollFilmInventory;use App\Model\SalesOrder;use App\Model\SalesOrderOtherFee;use App\Model\SalesOrderProductInfo;use App\Model\Storehouse;use App\Model\Supplier;use App\Model\Transfer;use App\Model\TransferSub;use Illuminate\Support\Facades\DB;use Maatwebsite\Excel\Facades\Excel;class ExportFileService extends Service{    //导出文件    const type_one = 1;    const type_two = 2;    const type_three = 3;    const type_four = 4;    const type_five = 5;    const type_six = 6;    const type_seven = 7;    //导出文件方法    protected static $fuc = [        self::type_one => 'kqList',        self::type_two => 'kqSummary',        self::type_three => '',        self::type_four => '',        self::type_five => '',    ];    protected static $special = [        self::type_two,    ];    protected static $fuc_name = [        self::type_one => '考勤',        self::type_two => '每日考勤数据汇总',        self::type_three => '',        self::type_four => '',        self::type_five => '',    ];    public static $filename = "";    public function exportAll($data,$user){        if(empty($data['type']) || ! isset(self::$fuc[$data['type']])) return [false,'导出文件类型错误或者不存在'];        self::$filename = self::$fuc_name[$data['type']] ?? "";        if(! in_array($data['type'], self::$special)) if(empty($data['id'])) return [false,'请选择导出数据'];        //不超时        ini_set('max_execution_time', 0);        //内存设置        ini_set('memory_limit', -1);        $function = self::$fuc[$data['type']];        list($status, $return) = $this->$function($data);        if(! $status) return [false, $return];        return [true, $return];    }    public function kqList($ergs){        $id = $ergs['id'];        // 导出数据        $return = [];        DB::table('kq_list')            ->whereIn('id', $id)            ->select('id','order_number','model_type','sales_order_type','sign_time','plat_order','plat_type','product_total','other_fee','discount_fee','contract_fee','crt_time','crt_id','state','invoice_state','pay_way')            ->orderBy('id','desc')            ->chunk(500,function ($data) use(&$return){                $data = Collect($data)->map(function ($object) {                    return (array)$object;                })->toArray();                $list['data'] = $data;            });        $header = ['合同单号'];        return $this->saveExportData($return,$header);    }    public function kqSummary($ergs){        // 导出数据        $return = [];        $employee_number = [];        if(empty($ergs['export_type'])){            //全部        }elseif($ergs['export_type'] == 1){            //部门            $employee_id = EmployeeDepartPermission::whereIn('depart_id',$ergs['depart_id'])                ->select('employee_id')                ->get()->toArray();            $employee_id = array_column($employee_id,'employee_id');            $employee_number = Employee::where('del_time',0)                ->whereIn('id',$employee_id)                ->select('number')                ->get()->toArray();            $employee_number = array_column($employee_number,'number');        }elseif($ergs['export_type'] == 2){            //个人            $employee_number = Employee::where('del_time',0)                ->whereIn('id',$ergs['employee_id'])                ->select('number')                ->get()->toArray();            $employee_number = array_column($employee_number,'number');        }else{            return [false, '导出类型不合法'];        }        if(empty($ergs['crt_time'][0]) || empty($ergs['crt_time'][1])) return [false, '请选择导出数据的日期'];        list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($ergs['crt_time']);        //数据        $list = KqList::where('crt_time', '>=', $start_time)            ->where('crt_time', '<=', $end_time)            ->when(! empty($employee_number), function ($query) use ($employee_number) {                return $query->where('number', $employee_number);            })            ->select('number',"emp_fname as name", DB::raw('FROM_UNIXTIME(crt_time, "%Y-%m-%d") as date'), DB::raw('MAX(crt_time) as max_crt_time'), DB::raw('MIN(crt_time) as min_crt_time'))            ->groupBy('number', DB::raw('FROM_UNIXTIME(crt_time, "%Y-%m-%d")'))            ->orderBy('number','asc')            ->get()->toArray();        foreach ($list as $value){            $return[] = [                0 => $value['number'],                1 => $value['name'],                2 => $value['date'],                3 => date("Y-m-d H:i:s",$value['min_crt_time']),                4 => date("Y-m-d H:i:s",$value['max_crt_time']),            ];        }unset($list);        $header = ["工号", "姓名", "日期", "最早打卡时间", "最晚打卡时间"];        return $this->saveExportData($return,$header,'kq');    }    public function saveExportData($data, $headers, $type = 'default',$file_name = ''){        if(empty($file_name)) $file_name = self::$filename . "_". date("Y-m-d") . "_". rand(1000,9999);        $filename =  $file_name . '.' . 'xlsx';        $bool = Excel::store(new ExportOrder($data,$type,$headers),"/public/export/{$filename}", null, 'Xlsx', []);        return [true, $filename];    }}
 |