'kqCollect', self::type_two => 'kqSummary', self::type_three => '', self::type_four => '', self::type_five => '', ]; protected static $special = [ self::type_one, 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,$user); if(! $status) return [false, $return]; return [true, $return]; } public function kqCollect($ergs, $user){ $service = new KqService(); list($status, $msg) = $service->kqCollect($ergs, $user); if(! $status) return [false, $msg]; // 导出数据 $return = $msg; $header = ['工号','姓名','考勤天数','总工时','迟到次数','迟到总工时','早退次数','早退总工时','加班次数','加班总工时']; return $this->saveExportData($return,$header); } public function kqSummary($ergs, $user){ // 导出数据 $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]; } }