2022-08-26 16:30:58 +00:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Models\WorkOrder;
|
|
|
|
|
|
2022-11-06 11:28:22 +00:00
|
|
|
|
use App\Exceptions\CommonException;
|
2022-11-19 04:38:26 +00:00
|
|
|
|
use App\Jobs\Module\WorkOrder\WorkOrder as WorkOrderJob;
|
2022-08-26 16:30:58 +00:00
|
|
|
|
use App\Models\Host;
|
2022-11-06 11:28:22 +00:00
|
|
|
|
use App\Models\Module;
|
2022-08-26 16:30:58 +00:00
|
|
|
|
use App\Models\User;
|
2022-11-06 11:28:22 +00:00
|
|
|
|
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
|
2022-08-26 16:30:58 +00:00
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
2022-11-06 11:28:22 +00:00
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
2022-08-26 16:30:58 +00:00
|
|
|
|
|
2022-11-20 03:40:20 +00:00
|
|
|
|
/**
|
|
|
|
|
* App\Models\WorkOrder\WorkOrder
|
|
|
|
|
*
|
2022-11-20 12:32:49 +00:00
|
|
|
|
* @property int $id
|
|
|
|
|
* @property string $title
|
|
|
|
|
* @property string $content
|
|
|
|
|
* @property int $user_id
|
|
|
|
|
* @property string $module_id
|
|
|
|
|
* @property int|null $host_id
|
|
|
|
|
* @property string $status
|
|
|
|
|
* @property \Illuminate\Support\Carbon|null $created_at
|
|
|
|
|
* @property \Illuminate\Support\Carbon|null $updated_at
|
|
|
|
|
* @property-read Host|null $host
|
|
|
|
|
* @property-read Module $module
|
2022-11-20 03:40:20 +00:00
|
|
|
|
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\WorkOrder\Reply[] $replies
|
2022-11-20 12:32:49 +00:00
|
|
|
|
* @property-read int|null $replies_count
|
|
|
|
|
* @property-read User $user
|
2022-11-20 03:40:20 +00:00
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder all($columns = [])
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder avg($column)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder cache(array $tags = [])
|
2022-11-20 13:09:51 +00:00
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder cachedValue(array $arguments, string $cacheKey)
|
2022-11-20 03:40:20 +00:00
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder count($columns = '*')
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder disableCache()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder disableModelCaching()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder exists()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder flushCache(array $tags = [])
|
2022-11-20 12:32:49 +00:00
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder
|
|
|
|
|
* getModelCacheCooldown(\Illuminate\Database\Eloquent\Model $instance)
|
2022-11-20 03:40:20 +00:00
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder inRandomOrder($seed = '')
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder insert(array $values)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder isCachable()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder max($column)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder min($column)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder newModelQuery()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder newQuery()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder query()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder sum($column)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder thisModule()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder thisUser()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder truncate()
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder whereContent($value)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder whereCreatedAt($value)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder whereHostId($value)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder whereId($value)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder whereModuleId($value)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder whereStatus($value)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder whereTitle($value)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder whereUpdatedAt($value)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder whereUserId($value)
|
|
|
|
|
* @method static \GeneaLabs\LaravelModelCaching\CachedBuilder|WorkOrder withCacheCooldownSeconds(?int $seconds = null)
|
|
|
|
|
* @mixin \Eloquent
|
|
|
|
|
*/
|
2022-08-26 16:30:58 +00:00
|
|
|
|
class WorkOrder extends Model
|
|
|
|
|
{
|
2022-11-06 11:28:22 +00:00
|
|
|
|
use HasFactory, Cachable;
|
2022-08-26 16:30:58 +00:00
|
|
|
|
|
|
|
|
|
protected $table = 'work_orders';
|
|
|
|
|
|
|
|
|
|
protected $fillable = [
|
|
|
|
|
'title',
|
|
|
|
|
'content',
|
|
|
|
|
'host_id',
|
|
|
|
|
'user_id',
|
|
|
|
|
'module_id',
|
|
|
|
|
'status',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
protected static function boot()
|
|
|
|
|
{
|
|
|
|
|
parent::boot();
|
|
|
|
|
|
|
|
|
|
static::creating(function ($model) {
|
|
|
|
|
|
|
|
|
|
if ($model->host_id) {
|
|
|
|
|
$model->load(['host']);
|
|
|
|
|
$model->module_id = $model->host->module_id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if logged
|
2022-11-06 11:28:22 +00:00
|
|
|
|
if (auth()->check()) {
|
|
|
|
|
$model->user_id = auth()->id();
|
2022-08-26 16:30:58 +00:00
|
|
|
|
|
|
|
|
|
if ($model->host_id) {
|
|
|
|
|
if (!$model->user_id === $model->host->user_id) {
|
|
|
|
|
throw new CommonException('user_id not match host user_id');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
throw new CommonException('user_id is required');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($model->host_id) {
|
|
|
|
|
$model->host->load('module');
|
|
|
|
|
$module = $model->host->module;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($module === null) {
|
|
|
|
|
$model->status = 'open';
|
|
|
|
|
} else {
|
|
|
|
|
$model->status = 'pending';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// updated
|
|
|
|
|
static::updated(function ($model) {
|
2022-11-16 02:29:50 +00:00
|
|
|
|
dispatch(new \App\Jobs\Module\WorkOrder\WorkOrder($model, 'put'));
|
2022-08-26 16:30:58 +00:00
|
|
|
|
});
|
|
|
|
|
}
|
2022-11-16 05:16:56 +00:00
|
|
|
|
|
2022-11-19 04:38:26 +00:00
|
|
|
|
public function safeDelete(): bool
|
|
|
|
|
{
|
|
|
|
|
if ($this->status == 'pending') {
|
|
|
|
|
throw new CommonException('工单状态是 pending,无法删除');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dispatch(new WorkOrderJob($this, 'delete'));
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-16 05:16:56 +00:00
|
|
|
|
// replies
|
|
|
|
|
|
|
|
|
|
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
|
|
|
{
|
|
|
|
|
return $this->belongsTo(User::class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// host
|
|
|
|
|
|
|
|
|
|
public function replies(): \Illuminate\Database\Eloquent\Relations\HasMany
|
|
|
|
|
{
|
|
|
|
|
return $this->hasMany(Reply::class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function host(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
|
|
|
{
|
|
|
|
|
return $this->belongsTo(Host::class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// scope
|
|
|
|
|
|
|
|
|
|
public function module(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
|
|
|
{
|
|
|
|
|
return $this->belongsTo(Module::class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function scopeThisModule($query)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('module_id', auth('module')->id());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// on create
|
|
|
|
|
|
|
|
|
|
public function scopeThisUser($query)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('user_id', auth()->id());
|
|
|
|
|
}
|
2022-08-26 16:30:58 +00:00
|
|
|
|
}
|