'', 'endDate' => '', 'type' => '', 'records' => null ]); } public function query(Request $request) { $startDate = $request->input('start_date'); $endDate = $request->input('end_date'); $type = $request->input('type'); // 1预约 2登记 if (!$startDate || !$endDate || !$type) { return redirect()->back()->with('error', '请填写完整查询条件'); } if ($type == 1) { // 查询预约表 $records = DB::table('appointment_record') ->select('name', 'tel', 'id_card_num', 'created_at', DB::raw('(select org_name from medical_institution where sn = org_code) as org_name')) ->whereBetween('created_at', [$startDate, $endDate]) ->where('is_del', 0) ->get(); } else { // 查询登记表 $records = DB::table('examination_records') ->select('name', 'tel', 'id_card_num', 'created_at', DB::raw('(select org_name from medical_institution where id = institution_id) as org_name')) ->whereBetween('created_at', [$startDate, $endDate]) ->where('is_del', 0) ->get(); } // 解密处理 foreach ($records as $record) { // 解密电话 if ($record->tel) { $decryptTel = HSM::HsmDecrypt($record->tel); $record->tel = $decryptTel['status'] ? $decryptTel['data'] : '解密失败'; } // 解密身份证号 if ($record->id_card_num) { $decryptIdCard = HSM::HsmDecrypt($record->id_card_num); $record->id_card_num = $decryptIdCard['status'] ? $decryptIdCard['data'] : '解密失败'; } } return view('record_query', compact('records', 'startDate', 'endDate', 'type')); } public function export(Request $request) { $startDate = $request->input('start_date'); $endDate = $request->input('end_date'); $type = $request->input('type'); // 1预约 2登记 if (!$startDate || !$endDate || !$type) { return redirect()->back()->with('error', '请填写完整查询条件'); } if ($type == 1) { // 查询预约表 $records = DB::table('appointment_record') ->select('name', 'tel', 'id_card_num', 'created_at', DB::raw('(select org_name from medical_institution where sn = org_code) as org_name')) ->whereBetween('created_at', [$startDate, $endDate]) ->where('is_del', 0) ->get(); } else { // 查询登记表 $records = DB::table('examination_records') ->select('name', 'tel', 'id_card_num', 'created_at', DB::raw('(select org_name from medical_institution where id = institution_id) as org_name')) ->whereBetween('created_at', [$startDate, $endDate]) ->where('is_del', 0) ->get(); } // 解密处理 foreach ($records as $record) { // 解密电话 if ($record->tel) { $decryptTel = HSM::HsmDecrypt($record->tel); $record->tel = $decryptTel['status'] ? $decryptTel['data'] : '解密失败'; } else { $record->tel = '空'; } // 解密身份证号 if ($record->id_card_num) { $decryptIdCard = HSM::HsmDecrypt($record->id_card_num); $record->id_card_num = $decryptIdCard['status'] ? $decryptIdCard['data'] : '解密失败'; } else { $record->id_card_num = '空'; } // 处理空值 $record->name = $record->name ?? '空'; $record->created_at = $record->created_at ?? '空'; $record->org_name = $record->org_name ?? '空'; } // 设置CSV文件名 $fileName = 'records_' . date('YmdHis') . '.csv'; // 设置响应头 $headers = [ 'Content-Type' => 'text/csv', 'Content-Disposition' => 'attachment; filename="' . $fileName . '"', ]; // 创建CSV内容 $callback = function() use ($records) { $handle = fopen('php://output', 'w'); // 写入BOM头,解决中文乱码问题 fwrite($handle, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 写入表头 fputcsv($handle, ['姓名', '电话', '身份证号', '创建时间', '机构名称'], ','); // 写入数据 foreach ($records as $record) { fputcsv($handle, [ $record->name, $record->tel, $record->id_card_num, $record->created_at, $record->org_name ], ','); } fclose($handle); }; return response()->stream($callback, 200, $headers); } }