97 lines
3.4 KiB
PHP
97 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Services;
|
|
|
|
use App\ModelFilters\PatientRecordFilter;
|
|
use App\Models\PatientRecord;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Slowlyo\OwlAdmin\Admin;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class PatientRecordService extends BaseService
|
|
{
|
|
protected string $modelName = PatientRecord::class;
|
|
|
|
protected array $withRelationships = ['doctor', 'patient', 'type', 'notifyUser'];
|
|
|
|
protected string $modelFilterName = PatientRecordFilter::class;
|
|
|
|
public function listQuery()
|
|
{
|
|
$model = $this->getModel();
|
|
$filter = $this->getModelFilter();
|
|
|
|
$query = $this->query();
|
|
if ($this->withRelationships) {
|
|
$query->with($this->withRelationships);
|
|
}
|
|
|
|
if ($filter) {
|
|
$query->filter(request()->input(), $filter);
|
|
}
|
|
|
|
return $query->sort();
|
|
}
|
|
|
|
public function list()
|
|
{
|
|
$query = $this->listQuery();
|
|
|
|
$list = $query->clone()->paginate(request()->input('perPage', 20));
|
|
$items = $list->items();
|
|
$total = $list->total();
|
|
$origin_price = floatval($query->clone()->sum('origin_price'));
|
|
$sell_price = floatval($query->clone()->sum('sell_price'));
|
|
|
|
return compact('items', 'total', 'sell_price', 'origin_price');
|
|
}
|
|
|
|
public function resloveData($data)
|
|
{
|
|
$creator_id = data_get($data, 'creator_id');
|
|
if (!$creator_id) {
|
|
$data['creator_id'] = data_get(Admin::user(), 'id');
|
|
}
|
|
if ($images = data_get($data, 'images')) {
|
|
$data['images'] = is_array($images) ? $images : explode(',', $images);
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
public function validate($data, $id = null)
|
|
{
|
|
$createRules = [
|
|
'patient_id' => 'required',
|
|
'type_id' => 'required',
|
|
'treat_at' => 'required',
|
|
'doctor_id' => 'required',
|
|
'origin_price' => ['required', 'decimal:0,2'],
|
|
'sell_price' => ['required', 'decimal:0,2'],
|
|
'order_status' => 'required',
|
|
'next_treat_at' => [Rule::requiredIf(fn () => request('is_notified') == 0)],
|
|
'notify_at' => [Rule::requiredIf(fn () => request('is_notified') == 0)],
|
|
'notify_user_id' => [Rule::requiredIf(fn () => request('is_notified') == 0)],
|
|
];
|
|
$updateRules = [
|
|
'origin_price' => 'decimal:0,2',
|
|
'sell_price' => 'decimal:0,2',
|
|
];
|
|
$validator = Validator::make($data, $id ? $updateRules : $createRules, [
|
|
'patient_id.required' => '请选择病人',
|
|
'type_id.required' => '请选择诊疗类型',
|
|
'treat_at.required' => '请选择诊疗时间',
|
|
'origin_price.required' => __('patient-record.origin_price') . '必填',
|
|
'origin_price.decimal' => __('patient-record.origin_price') . '保留2位小数',
|
|
'sell_price.required' => __('patient-record.sell_price') . '必填',
|
|
'sell_price.decimal' => __('patient-record.sell_price') . '必填',
|
|
'notify_at.required' => __('patient-record.notify_at') . '必填',
|
|
'notify_user_id.required' => __('patient-record.notify_user_id') . '必填',
|
|
'next_treat_at.required' => __('patient-record.next_treat_at') . '必填',
|
|
]);
|
|
if ($validator->fails()) {
|
|
return $validator->errors()->first();
|
|
}
|
|
return true;
|
|
}
|
|
}
|