master
cody 5 months ago
parent 7fa2c2b76d
commit 3b9f56ab36

@ -57,156 +57,60 @@ class EmailRecordController extends BaseController
public function index() public function index()
{ {
$all = request()->all(); $all = request()->all();
$list = $this->model->where(function ($query) use ($all) { $list = $this->model->with('emailTemplate')
if (isset($all['filter']) && !empty($all['filter'])) { ->withCount('emailRecordUsers')
foreach ($all['filter'] as $condition) { ->where(function ($query) use ($all) {
$key = $condition['key'] ?? null; if (isset($all['filter']) && !empty($all['filter'])) {
$op = $condition['op'] ?? null; foreach ($all['filter'] as $condition) {
$value = $condition['value'] ?? null; $key = $condition['key'] ?? null;
if (!isset($key) || !isset($op) || !isset($value)) { $op = $condition['op'] ?? null;
continue; $value = $condition['value'] ?? null;
} if (!isset($key) || !isset($op) || !isset($value)) {
// 等于
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; continue;
} }
$query->whereBetween($key, [$from, $to]); // 等于
} if ($op == 'eq') {
} $query->where($key, $value);
} }
})->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc'); // 不等于
if (isset($all['is_export']) && !empty($all['is_export'])) { if ($op == 'neq') {
$list = $list->get()->toArray(); $query->where($key, '!=', $value);
$export_fields = $all['export_fields'] ?? []; }
// 导出文件名字 // 大于
$tableName = $this->model->getTable(); if ($op == 'gt') {
$filename = (new CustomForm())->getTableComment($tableName); $query->where($key, '>', $value);
return Excel::download(new BaseExport($export_fields, $list, $tableName), $filename . date('YmdHis') . '.xlsx'); }
} else { // 大于等于
// 输出 if ($op == 'egt') {
$list = $list->paginate($all['page_size'] ?? 20); $query->where($key, '>=', $value);
} }
return $this->success($list); // 小于
} if ($op == 'lt') {
$query->where($key, '<', $value);
/** }
* @OA\Get( // 小于等于
* path="/api/admin/email-record/user-index", if ($op == 'elt') {
* tags={"发送记录"}, $query->where($key, '<=', $value);
* summary="列表", }
* description="", // 模糊搜索
* @OA\Parameter(name="email_template_id", in="query", @OA\Schema(type="string"), required=false, description="模版id"), if ($op == 'like') {
* @OA\Parameter(name="is_export", in="query", @OA\Schema(type="string"), required=false, description="是否导出0否1是"), $query->where($key, 'like', '%' . $value . '%');
* @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="需要输出的关联关系数组包括teachercourseSettingscoursePeriods"), if ($op == 'notlike') {
* @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"), $query->where($key, 'not like', '%' . $value . '%');
* @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="排序类型"), if ($op == 'range') {
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), list($from, $to) = explode(',', $value);
* @OA\Response( if (empty($from) || empty($to)) {
* response="200", continue;
* description="暂无" }
* ) $query->whereBetween($key, [$from, $to]);
* )
*/
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');
})->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc');
if (isset($all['is_export']) && !empty($all['is_export'])) { if (isset($all['is_export']) && !empty($all['is_export'])) {
$list = $list->get()->toArray(); $list = $list->get()->toArray();
$export_fields = $all['export_fields'] ?? []; $export_fields = $all['export_fields'] ?? [];
@ -217,19 +121,14 @@ class EmailRecordController extends BaseController
} else { } else {
// 输出 // 输出
$list = $list->paginate($all['page_size'] ?? 20); $list = $list->paginate($all['page_size'] ?? 20);
} foreach ($list as $detail) {
$email_records = EmailRecord::where(function ($query) use ($all) { // 成功数量
if (isset($all['email_template_id'])) { $detail->success_count = $detail->emailRecordUsers->where('status', 1)->count();
$query->where('email_template_id', $all['email_template_id']); // 失败数量
$detail->fail_count = $detail->emailRecordUsers->where('status', 2)->count();
} }
})->get(); }
// 发送总数 return $this->success($list);
$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'));
} }
/** /**

@ -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/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::get('email-record/show', [\App\Http\Controllers\Admin\EmailRecordController::class, "show"]);
Route::post('email-record/save', [\App\Http\Controllers\Admin\EmailRecordController::class, "save"]); Route::post('email-record/save', [\App\Http\Controllers\Admin\EmailRecordController::class, "save"]);
Route::get('email-record/destroy', [\App\Http\Controllers\Admin\EmailRecordController::class, "destroy"]); Route::get('email-record/destroy', [\App\Http\Controllers\Admin\EmailRecordController::class, "destroy"]);

Loading…
Cancel
Save