Merge branch 'main' of github.com:EdgeStanding/lae
This commit is contained in:
commit
6ae115c99c
@ -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'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -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();
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user