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.

140 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Models;
use DateTimeInterface;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Carbon;
use Laravel\Sanctum\HasApiTokens;
use OwenIt\Auditing\Contracts\Auditable;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Authenticatable implements Auditable
{
use HasApiTokens, HasFactory, Notifiable;
use \OwenIt\Auditing\Auditable;
use SoftDeletes;
protected $guarded = ['id'];
protected $appends = ['is_vip_text', 'is_schoolmate_text', 'appointment_total', 'name'];
// 更新时候覆盖更新的字段
public static $coverFields = [
'name', 'sex', 'mobile', 'company_has_share', 'company_name', 'school', 'speciality',
'birthday', 'mobile', 'idcard', 'education', 'company_date', 'sales_volume', 'valuation',
'market_value', 'is_yuanhe', 'username',
'company_position', 'company_need_fund', 'company_address', 'company_area',
'course_id', 'status', 'fee_status', 'is_vip'
];
public function getNameAttribute($value)
{
return $this->username;
}
public function getAppointmentTotalAttribute($value)
{
$now = date('Y-m-d H:i:s');
$courseAppointmentTotals = CourseAppointmentTotal::where('user_id', $this->id)
//->where('start_time', '<=', $now)
->where('end_time', '>=', $now)
->sum('total');
return $courseAppointmentTotals;
}
protected function serializeDate(DateTimeInterface $date)
{
return $date->format(Carbon::parse($date)->toDateTimeString());
}
public function getIsVipTextAttribute($value)
{
return self::$intToString['is_vip'][$this->is_vip] ?? '';
}
public function getIsSchoolmateTextAttribute($value)
{
return self::$intToString['is_schoolmate'][$this->is_schoolmate] ?? '';
}
/**
* 数据类型转换,数字转字符串。
* 值是id则是数据字典的顶级id或者是枚举型数组
* @var array[]
*/
public static $intToString = [
'company_position' => 1,
'company_area' => 1,
'company_industry' => 1,
'company_type' => 1,
'is_vip' => ['普通学员', 'VIP学员'],
'is_schoolmate' => ['否', '是'],
];
public function courses()
{
return $this->belongsToMany(Course::class, 'course_signs', 'user_id', 'course_id');
}
public function courseSigns()
{
return $this->hasMany(CourseSign::class, 'user_id', 'id');
}
public function companyAreaDetail()
{
return $this->hasOne(ParameterDetail::class, 'id', 'company_area');
}
public function companyPositionDetail()
{
return $this->hasOne(ParameterDetail::class, 'id', 'company_position');
}
public function companyIndustryDetail()
{
return $this->hasOne(ParameterDetail::class, 'id', 'company_industry');
}
public function companyTypeDetail()
{
return $this->hasOne(ParameterDetail::class, 'id', 'company_type');
}
public function appointments()
{
return $this->hasMany(Appointment::class, 'user_id', 'id');
}
/**
* 获取预约剩余次数
*/
public static function getHasAppointment($userId)
{
$user = self::find($userId);
// 已预约次数 todo::已使用的次数应该存在有效期统计
$useTotal = Appointment::where('user_id', $userId)
->where('status', 1)
->count();
return $user->appointment_total - $useTotal >= 0 ? $user->appointment_total - $useTotal : 0;
}
/**
* 更新用户编号
*/
public static function updateNo($userId)
{
$user = self::find($userId);
$no = date('Ymd', strtotime($user->created_at)) . str_pad($userId, 6, '0', STR_PAD_LEFT);
$user->no = $no;
$user->save();
return $user->no;
}
}