diff --git a/app/Http/Controllers/Admin/EmailRecordController.php b/app/Http/Controllers/Admin/EmailRecordController.php index e3b58b9..dadb1a9 100644 --- a/app/Http/Controllers/Admin/EmailRecordController.php +++ b/app/Http/Controllers/Admin/EmailRecordController.php @@ -12,6 +12,7 @@ use App\Models\CourseContentEvaluationForm; use App\Models\CustomForm; use App\Models\CustomFormField; use App\Models\EmailRecord; +use App\Models\EmailRecordUser; use App\Models\EmailTemplate; use App\Models\SupplyDemand; use Illuminate\Support\Carbon; @@ -122,6 +123,115 @@ class EmailRecordController extends BaseController 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; + } + $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); + } + $email_records = EmailRecord::where(function ($query) use ($all) { + if (isset($all['email_template_id'])) { + $query->where('email_template_id', $all['email_template_id']); + } + })->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')); + } + /** * @OA\Get( * path="/api/admin/email-record/show", diff --git a/app/Models/EmailRecordUser.php b/app/Models/EmailRecordUser.php index 5e9ca64..71b4e00 100755 --- a/app/Models/EmailRecordUser.php +++ b/app/Models/EmailRecordUser.php @@ -11,6 +11,11 @@ class EmailRecordUser extends SoftDeletesModel { protected $casts = ['var_data' => 'json']; + public function emailRecord() + { + return $this->hasOne(EmailRecord::class, 'id', 'email_record_id'); + } + /** * 邮件模版内容替换 * @param $template diff --git a/routes/api.php b/routes/api.php index 695a8d6..3f606dc 100755 --- a/routes/api.php +++ b/routes/api.php @@ -213,6 +213,7 @@ 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"]);