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(); $sell_price = floatval($query->clone()->sum('sell_price')); $doctor_money = floatval($query->clone()->sum('doctor_money')); $inviter_money = floatval($query->clone()->sum('inviter_money')); $saler_money = floatval($query->clone()->sum('saler_money')); return compact('items', 'total', 'sell_price', 'doctor_money', 'inviter_money', 'saler_money'); } public function resloveData($data, $model = null) { $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); } if (!$model) { $patient = Patient::findOrFail(data_get($data, 'patient_id')); $type = Keyword::findOrFail(data_get($data, 'type_id')); $data['saler_id'] = $patient->saler_id; $data['inviter_id'] = $patient->inviter_id; if (data_get($data, 'doctor_id')) { $data['doctor_ratio'] = data_get($type->options, 'doctor_ratio', 0); $data['doctor_money'] = floor($data['sell_price'] * $data['doctor_ratio']) / 100; } if (data_get($data, 'inviter_id')) { $data['inviter_ratio'] = data_get($type->options, 'inviter_ratio', 0); $data['inviter_money'] = floor($data['sell_price'] * $data['inviter_ratio']) / 100; } if (data_get($data, 'saler_id')) { $data['saler_ratio'] = data_get($type->options, 'saler_ratio', 0); $data['saler_money'] = floor($data['sell_price'] * $data['saler_ratio']) / 100; } } else { if (data_get($data, 'sell_price')) { $data['doctor_money'] = floor($data['sell_price'] * $model->doctor_ratio) / 100; $data['inviter_money'] = floor($data['sell_price'] * $model->inviter_ratio) / 100; $data['saler_money'] = floor($data['sell_price'] * $model->saler_ratio) / 100; } } return $data; } public function validate($data, $model = 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, $model ? $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; } }