jiraService = $jiraService; } /** * 生成周报 */ public function generateWeeklyReport(Request $request): JsonResponse { try { $username = $request->input('username') ?: config('jira.default_user'); $period = $request->input('period', 'this_week'); if (! $username) { return response()->json([ 'success' => false, 'message' => '请提供用户名', ], 400); } if (! in_array($period, self::WEEKLY_REPORT_PERIODS, true)) { return response()->json([ 'success' => false, 'message' => '无效的周报周期', ], 400); } $report = $this->jiraService->generateWeeklyReport($username, $period); return response()->json([ 'success' => true, 'data' => [ 'report' => $report, 'username' => $username, 'period' => $period, 'generated_at' => Carbon::now()->format('Y-m-d H:i:s'), ], ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => '生成周报失败: '.$e->getMessage(), ], 500); } } /** * 获取工时记录 */ public function getWorkLogs(Request $request): JsonResponse { $request->validate([ 'username' => 'required|string', 'start_date' => 'required|date', 'end_date' => 'required|date|after_or_equal:start_date', ]); try { $username = $request->input('username'); $startDate = Carbon::parse($request->input('start_date'))->startOfDay(); $endDate = Carbon::parse($request->input('end_date'))->endOfDay(); $workLogs = $this->jiraService->getWorkLogs($username, $startDate, $endDate); return response()->json([ 'success' => true, 'data' => [ 'work_logs' => $workLogs->values()->toArray(), 'total_hours' => $workLogs->sum('hours'), 'total_records' => $workLogs->count(), 'date_range' => [ 'start' => $startDate->format('Y-m-d'), 'end' => $endDate->format('Y-m-d'), ], ], ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => '获取工时记录失败: '.$e->getMessage(), ], 500); } } /** * 获取JIRA配置信息 */ public function getConfig(): JsonResponse { return response()->json([ 'success' => true, 'data' => [ 'default_user' => config('jira.default_user', ''), 'host' => config('jira.host', ''), ], ]); } /** * 下载周报文件 */ public function downloadWeeklyReport(Request $request) { try { $username = $request->input('username') ?: config('jira.default_user'); $period = $request->input('period', 'this_week'); if (! $username) { return response()->json([ 'success' => false, 'message' => '请提供用户名', ], 400); } if (! in_array($period, self::WEEKLY_REPORT_PERIODS, true)) { return response()->json([ 'success' => false, 'message' => '无效的周报周期', ], 400); } $report = $this->jiraService->generateWeeklyReport($username, $period); $filename = sprintf('weekly_report_%s_%s_%s.md', $username, $period, Carbon::now()->format('Y-m-d')); return response($report) ->header('Content-Type', 'text/markdown') ->header('Content-Disposition', 'attachment; filename="'.$filename.'"'); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => '下载周报失败: '.$e->getMessage(), ], 500); } } }