From 3b9f56ab363b918146d2b43521e2ca024fcf4316 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Tue, 8 Jul 2025 14:36:53 +0800 Subject: [PATCH] update --- .../Admin/EmailRecordController.php | 213 +++++------------- routes/api.php | 1 - 2 files changed, 56 insertions(+), 158 deletions(-) diff --git a/app/Http/Controllers/Admin/EmailRecordController.php b/app/Http/Controllers/Admin/EmailRecordController.php index dadb1a9..10391f1 100644 --- a/app/Http/Controllers/Admin/EmailRecordController.php +++ b/app/Http/Controllers/Admin/EmailRecordController.php @@ -57,156 +57,60 @@ class EmailRecordController extends BaseController public function index() { $all = request()->all(); - $list = $this->model->where(function ($query) use ($all) { - if (isset($all['filter']) && !empty($all['filter'])) { - foreach ($all['filter'] as $condition) { - $key = $condition['key'] ?? null; - $op = $condition['op'] ?? null; - $value = $condition['value'] ?? null; - if (!isset($key) || !isset($op) || !isset($value)) { - continue; - } - // 等于 - if ($op == 'eq') { - $query->where($key, $value); - } - // 不等于 - if ($op == 'neq') { - $query->where($key, '!=', $value); - } - // 大于 - if ($op == 'gt') { - $query->where($key, '>', $value); - } - // 大于等于 - if ($op == 'egt') { - $query->where($key, '>=', $value); - } - // 小于 - if ($op == 'lt') { - $query->where($key, '<', $value); - } - // 小于等于 - if ($op == 'elt') { - $query->where($key, '<=', $value); - } - // 模糊搜索 - if ($op == 'like') { - $query->where($key, 'like', '%' . $value . '%'); - } - // 否定模糊搜索 - if ($op == 'notlike') { - $query->where($key, 'not like', '%' . $value . '%'); - } - // 范围搜索 - if ($op == 'range') { - list($from, $to) = explode(',', $value); - if (empty($from) || empty($to)) { + $list = $this->model->with('emailTemplate') + ->withCount('emailRecordUsers') + ->where(function ($query) use ($all) { + if (isset($all['filter']) && !empty($all['filter'])) { + foreach ($all['filter'] as $condition) { + $key = $condition['key'] ?? null; + $op = $condition['op'] ?? null; + $value = $condition['value'] ?? null; + if (!isset($key) || !isset($op) || !isset($value)) { continue; } - $query->whereBetween($key, [$from, $to]); - } - } - } - })->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc'); - if (isset($all['is_export']) && !empty($all['is_export'])) { - $list = $list->get()->toArray(); - $export_fields = $all['export_fields'] ?? []; - // 导出文件名字 - $tableName = $this->model->getTable(); - $filename = (new CustomForm())->getTableComment($tableName); - return Excel::download(new BaseExport($export_fields, $list, $tableName), $filename . date('YmdHis') . '.xlsx'); - } else { - // 输出 - $list = $list->paginate($all['page_size'] ?? 20); - } - return $this->success($list); - } - - /** - * @OA\Get( - * path="/api/admin/email-record/user-index", - * tags={"发送记录"}, - * summary="列表", - * description="", - * @OA\Parameter(name="email_template_id", in="query", @OA\Schema(type="string"), required=false, description="模版id"), - * @OA\Parameter(name="is_export", in="query", @OA\Schema(type="string"), required=false, description="是否导出0否1是"), - * @OA\Parameter(name="export_fields", in="query", @OA\Schema(type="string"), required=false, description="需要导出的字段数组"), - * @OA\Parameter(name="filter", in="query", @OA\Schema(type="string"), required=false, description="查询条件。数组"), - * @OA\Parameter(name="show_relation", in="query", @OA\Schema(type="string"), required=false, description="需要输出的关联关系数组,包括:teacher,courseSettings,coursePeriods"), - * @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"), - * @OA\Parameter(name="page", in="query", @OA\Schema(type="string"), required=false, description="页码"), - * @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"), - * @OA\Parameter(name="sort_type", in="query", @OA\Schema(type="string"), required=false, description="排序类型"), - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Response( - * response="200", - * description="暂无" - * ) - * ) - */ - public function userIndex() - { - $all = request()->all(); - $list = EmailRecordUser::with('emailRecord.emailTemplate')->where(function ($query) use ($all) { - if (isset($all['email_template_id'])) { - $query->whereHas('emailRecord', function ($q) use ($all) { - $q->whereHas('emailTemplate', function ($qry) use ($all) { - $qry->where('id', $all['email_template_id']); - }); - }); - } - if (isset($all['filter']) && !empty($all['filter'])) { - foreach ($all['filter'] as $condition) { - $key = $condition['key'] ?? null; - $op = $condition['op'] ?? null; - $value = $condition['value'] ?? null; - if (!isset($key) || !isset($op) || !isset($value)) { - continue; - } - // 等于 - if ($op == 'eq') { - $query->where($key, $value); - } - // 不等于 - if ($op == 'neq') { - $query->where($key, '!=', $value); - } - // 大于 - if ($op == 'gt') { - $query->where($key, '>', $value); - } - // 大于等于 - if ($op == 'egt') { - $query->where($key, '>=', $value); - } - // 小于 - if ($op == 'lt') { - $query->where($key, '<', $value); - } - // 小于等于 - if ($op == 'elt') { - $query->where($key, '<=', $value); - } - // 模糊搜索 - if ($op == 'like') { - $query->where($key, 'like', '%' . $value . '%'); - } - // 否定模糊搜索 - if ($op == 'notlike') { - $query->where($key, 'not like', '%' . $value . '%'); - } - // 范围搜索 - if ($op == 'range') { - list($from, $to) = explode(',', $value); - if (empty($from) || empty($to)) { - continue; + // 等于 + if ($op == 'eq') { + $query->where($key, $value); + } + // 不等于 + if ($op == 'neq') { + $query->where($key, '!=', $value); + } + // 大于 + if ($op == 'gt') { + $query->where($key, '>', $value); + } + // 大于等于 + if ($op == 'egt') { + $query->where($key, '>=', $value); + } + // 小于 + if ($op == 'lt') { + $query->where($key, '<', $value); + } + // 小于等于 + if ($op == 'elt') { + $query->where($key, '<=', $value); + } + // 模糊搜索 + if ($op == 'like') { + $query->where($key, 'like', '%' . $value . '%'); + } + // 否定模糊搜索 + if ($op == 'notlike') { + $query->where($key, 'not like', '%' . $value . '%'); + } + // 范围搜索 + if ($op == 'range') { + list($from, $to) = explode(',', $value); + if (empty($from) || empty($to)) { + continue; + } + $query->whereBetween($key, [$from, $to]); } - $query->whereBetween($key, [$from, $to]); } } - } - })->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc'); + })->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc'); if (isset($all['is_export']) && !empty($all['is_export'])) { $list = $list->get()->toArray(); $export_fields = $all['export_fields'] ?? []; @@ -217,19 +121,14 @@ class EmailRecordController extends BaseController } else { // 输出 $list = $list->paginate($all['page_size'] ?? 20); - } - $email_records = EmailRecord::where(function ($query) use ($all) { - if (isset($all['email_template_id'])) { - $query->where('email_template_id', $all['email_template_id']); + foreach ($list as $detail) { + // 成功数量 + $detail->success_count = $detail->emailRecordUsers->where('status', 1)->count(); + // 失败数量 + $detail->fail_count = $detail->emailRecordUsers->where('status', 2)->count(); } - })->get(); - // 发送总数 - $total_count = EmailRecordUser::whereIn('email_record_id', $email_records->pluck('id'))->count(); - // 成功数量 - $success_count = EmailRecordUser::whereIn('email_record_id', $email_records->pluck('id'))->where('status', 1)->count(); - // 失败数量 - $fail_count = EmailRecordUser::whereIn('email_record_id', $email_records->pluck('id'))->where('status', 2)->count(); - return $this->success(compact('list', 'total_count', 'success_count', 'fail_count')); + } + return $this->success($list); } /** diff --git a/routes/api.php b/routes/api.php index 3f606dc..695a8d6 100755 --- a/routes/api.php +++ b/routes/api.php @@ -213,7 +213,6 @@ Route::group(["namespace" => "Admin", "prefix" => "admin"], function () { // 邮件发送配置 Route::get('email-record/index', [\App\Http\Controllers\Admin\EmailRecordController::class, "index"]); - Route::get('email-record/user-index', [\App\Http\Controllers\Admin\EmailRecordController::class, "userIndex"]); Route::get('email-record/show', [\App\Http\Controllers\Admin\EmailRecordController::class, "show"]); Route::post('email-record/save', [\App\Http\Controllers\Admin\EmailRecordController::class, "save"]); Route::get('email-record/destroy', [\App\Http\Controllers\Admin\EmailRecordController::class, "destroy"]);