Merge branch 'main' of github.com:EdgeStanding/lae

This commit is contained in:
iVampireSP.com 2022-09-01 22:34:18 +08:00
commit 6ae115c99c
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
2 changed files with 0 additions and 210 deletions

View File

@ -1,77 +0,0 @@
<?php
namespace App\Models\WorkOrder;
use App\Exceptions\CommonException;
use App\Models\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Reply extends Model
{
use HasFactory;
protected $table = 'work_order_replies';
protected $fillable = [
'content',
'work_order_id',
'user_id',
'is_pending',
];
public function workOrder()
{
return $this->belongsTo(WorkOrder::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
public function scopeWorkOrderId($query, $work_order_id)
{
return $query->where('work_order_id', $work_order_id);
}
// before create
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->is_pending = 1;
// load work order
$model->load(['workOrder']);
throw_if($model->workOrder->status == 'pending' || $model->workOrder->status == 'error', CommonException::class, '工单状态不正确');
// change work order status
if (auth('sanctum')->check()) {
$model->user_id = auth()->id();
$model->workOrder->status = 'user_replied';
}
if (auth('remote')->check()) {
$model->user_id = null;
$model->workOrder->status = 'replied';
}
$model->workOrder->save();
});
static::created(function ($model) {
if (auth('remote')->check()) {
$model->workOrder->status = 'replied';
$model->workOrder->save();
}
// dispatch
dispatch(new \App\Jobs\Remote\WorkOrder\Reply($model));
dispatch(new \App\Jobs\Remote\WorkOrder\WorkOrder($model->workOrder, 'put'));
});
}
}

View File

@ -1,133 +0,0 @@
<?php
namespace App\Models\WorkOrder;
use App\Models\Host;
use App\Models\User;
use App\Models\Module\Module;
use App\Exceptions\CommonException;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class WorkOrder extends Model
{
use HasFactory;
protected $table = 'work_orders';
protected $fillable = [
'title',
'content',
'host_id',
'user_id',
'module_id',
'status',
];
// user
public function user() {
return $this->belongsTo(User::class);
}
// replies
public function replies()
{
return $this->hasMany(Reply::class);
}
// host
public function host()
{
return $this->belongsTo(Host::class);
}
public function module()
{
return $this->belongsTo(Module::class);
}
// scope
public function scopeThisModule($query)
{
return $query->where('module_id', auth('remote')->id());
}
public function scopeThisUser($query)
{
return $query->where('user_id', auth()->id());
}
// on create
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
if (auth('sanctum')->check()) {
$model->user_id = auth('sanctum')->id();
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';
}
}
});
// 更新时获取差异部分
static::updating(function ($model) {
// $original = $model->getOriginal();
// // dd($original);
// $diff = array_diff_assoc($model->attributes, $original);
// // 如果更新了host_id则抛出异常
// if (isset($diff['host_id'])) {
// throw new CommonException('host_id cannot be updated');
// }
});
// updated
static::updated(function ($model) {
dispatch(new \App\Jobs\Remote\WorkOrder\WorkOrder($model, 'put'));
// $original = $model->getOriginal();
// $diff = array_diff_assoc($model->attributes, $original);
// // dd($diff);
// if (isset($diff['status'])) {
// $model->load(['host']);
// $model->host->load('module');
// $module = $model->host->module;
// if ($module === null) {
// $model->status = 'open';
// } else {
// $model->status = 'pending';
// }
// $model->save();
// }
});
}
}