You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.4 KiB
120 lines
3.4 KiB
<?php
|
|
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
use OwenIt\Auditing\Models\Audit;
|
|
|
|
class CourseSign extends SoftDeletesModel
|
|
{
|
|
protected $casts = ['file_ids' => 'json', 'fee_file_ids' => 'json', 'data' => 'json', 'change_data' => 'json'];
|
|
|
|
protected $appends = ['files', 'fee_files', 'status_text', 'fee_status_text'];
|
|
|
|
public static $intToString = [
|
|
'status' => [
|
|
0 => '待审核',
|
|
1 => '审核通过',
|
|
2 => '审核不通过',
|
|
3 => '备选',
|
|
4 => '已取消',
|
|
5 => '主动放弃',
|
|
6 => '黑名单'
|
|
],
|
|
'fee_status' => [
|
|
0 => '未缴费',
|
|
1 => '缴费成功',
|
|
2 => '缴费失败',
|
|
3 => '待确认'
|
|
],
|
|
];
|
|
|
|
public function getStatusTextAttribute($value)
|
|
{
|
|
return self::$intToString['status'][$this->status] ?? '';
|
|
}
|
|
|
|
public function getFeeStatusTextAttribute($value)
|
|
{
|
|
return self::$intToString['fee_status'][$this->fee_status] ?? '';
|
|
}
|
|
|
|
public function getFilesAttribute($value)
|
|
{
|
|
if (empty($this->file_ids)) return [];
|
|
return Upload::whereIn('id', $this->file_ids)->get();
|
|
}
|
|
|
|
public function getFeeFilesAttribute($value)
|
|
{
|
|
if (empty($this->fee_file_ids)) return [];
|
|
return Upload::whereIn('id', $this->fee_file_ids)->get();
|
|
}
|
|
|
|
public function course()
|
|
{
|
|
return $this->hasOne(Course::class, 'id', 'course_id');
|
|
}
|
|
|
|
public function courseContentCheck()
|
|
{
|
|
return $this->hasOne(CourseContentCheck::class, 'course_id', 'course_id')->where('user_id', 'user_id');
|
|
}
|
|
|
|
public function user()
|
|
{
|
|
return $this->hasOne(User::class, 'id', 'user_id');
|
|
}
|
|
|
|
/**
|
|
* 第三方日志记录
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
*/
|
|
public function thirdAppointmentLogs()
|
|
{
|
|
return $this->hasMany(ThirdAppointmentLog::class, 'course_sign_id', 'id');
|
|
}
|
|
|
|
|
|
/**
|
|
* 指定时间内的报名信息(未去重)
|
|
*/
|
|
public static function courseSignsTotal($start_date, $end_date, $status = null, $course_ids = null)
|
|
{
|
|
$total = CourseSign::whereDate('created_at', '>=', $start_date)
|
|
->whereDate('created_at', '<=', $end_date)
|
|
->where(function ($query) use ($status, $course_ids) {
|
|
if (isset($status)) {
|
|
$query->where('status', $status);
|
|
}
|
|
if (isset($course_ids)) {
|
|
$query->whereIn('course_id', $course_ids);
|
|
}
|
|
})->whereNotIn('status', [4, 5])
|
|
->count();
|
|
return $total;
|
|
}
|
|
|
|
/**
|
|
* 指定时间内的报名信息(去重)
|
|
*/
|
|
public static function courseSignsTotalByUnique($start_date, $end_date, $status = null, $course_ids = null)
|
|
{
|
|
$courseSignByType = CourseSign::whereDate('created_at', '>=', $start_date)
|
|
->whereDate('created_at', '<=', $end_date)
|
|
->where(function ($query) use ($status, $course_ids) {
|
|
if (isset($status)) {
|
|
$query->where('status', $status);
|
|
}
|
|
if (isset($course_ids)) {
|
|
$query->whereIn('course_id', $course_ids);
|
|
}
|
|
})->whereNotIn('status', [4, 5])
|
|
->get();
|
|
return User::whereIn('id', $courseSignByType->pluck('user_id'))->distinct('mobile')->count();
|
|
}
|
|
|
|
}
|
|
|