Files
xk-api-yii/member/models/forms/AskForm.php

293 lines
11 KiB
PHP

<?php
namespace member\models\forms;
use common\core\BaseModel;
use common\enums\UserStatusEnum;
use common\events\OrderEvent;
use common\helpers\ArrayHelper;
use common\helpers\FuncHelper;
use common\models\oldDb\DoctorPatient;
use common\models\oldDb\Order;
use common\models\oldDb\OrderVideoInfo;
use common\models\oldDb\ServiceUser;
use common\models\oldDb\UserInquiry;
use common\models\oldDb\UserPatient;
use yii\base\Exception;
//问诊form
class AskForm extends BaseModel
{
public $doctor_id;
public $desc;
public $images;
public $patient_id;
public $is_visit;
public $visit_desc;
public $liver_function;
public $renal_function;
public $allergic_status;
public $allergic_history;
public $person_status;
public $person_history;
public $family_status;
public $family_history;
public $type;
public $store_id;
public $patient_data;
public function rules()
{
return [
[['doctor_id','desc','images','patient_id','type'],'required'],
['desc', 'string', 'length' => [10, 255]],
['images', 'checkImages'],
['patient_id','checkPatient'],
['is_visit','default','value'=> 0],
['visit_desc','required','when'=>function($model){
return $model->is_visit == 1;
}],
['visit_desc','default','value'=>''],
[['liver_function', 'renal_function', 'allergic_status', 'person_status','family_status'], 'default', 'value' => 0],
[['allergic_history', 'person_history', 'family_history'], 'default', 'value' => '[]'],
['allergic_history','required','when'=>function($model){
return $model->allergic_status == 1;
}],
['person_history','required','when'=>function($model){
return $model->person_status == 1;
}],
['family_history','required','when'=>function($model){
return $model->family_status == 1;
}],
];
}
public function checkImages($attribute, $params)
{
$images = json_decode($this->images,true);
if(empty($images)){
$this->addError($attribute, '检查报告或患处图片不能为空');
}
}
public function checkPatient($attribute, $params)
{
$patient = UserPatient::find()->where([
'id' => $this->patient_id,
'user_id' => \Yii::$app->user->identity->id,
'is_delete' => 0,
])->one();
if(!$patient){
$this->addError($attribute, '患者不存在');
}
$this->patient_data = ArrayHelper::toArray($patient,[
UserPatient::class => [
'id','name','id_card','sex','relation','mobile','is_default','avatar'
// 'age' => function($model){
// return FuncHelper::getAgeFromIdNo($model->id_card);
// },
]
]);
}
public function attributeLabels()
{
return [
'desc' => '病情',
'images' => '报告或患者图片',
'patient_id' => '就诊人',
'is_visit' => '是否就诊过',
'visit_desc' => '实体医院就诊确诊病例名称',
'liver_function' => '肝功能',
'renal_function' => '肾功能',
'allergic_history' => '过敏史',
'person_history' => '个人病史',
'family_history' => '家庭病史',
];
}
public function save()
{
if (!$this->validate()) {
throw new Exception($this->getErrorMsg());
}
//咨询的医生
$doctor = ServiceUser::find()->where([
'id' => $this->doctor_id,
'is_delete' => 0,
'status' => UserStatusEnum::OK
])->with('docService')->one();
if(!$doctor){
throw new Exception('医生不存在');
}
if(!$doctor->docService->image_limit_status){
throw new Exception('医生未开通图文问诊服务');
}
$t = \Yii::$app->db->beginTransaction();
try {
$UserInquiry = new UserInquiry();
$UserInquiry->attributes = $this->attributes;
$UserInquiry->su_id = $this->doctor_id;
$UserInquiry->user_id = \Yii::$app->user->identity->id;
$UserInquiry->patient_data = json_encode($this->patient_data);
$UserInquiry->saveOrFail();
$order = new Order();
$order->user_id = \Yii::$app->user->identity->id;
$order->su_id = $this->doctor_id;
$order->up_id=$this->patient_id;
$order->type = $this->type;
$order->ui_id = $UserInquiry->id;
$order->order_no = FuncHelper::generate_order_no('SN');
$order->total_pay_price = $doctor->docService->register_price;
$order->saveOrFail();
$event = new OrderEvent();//触发订单创建事件
$event->order = $order;
$event->sender = $this;
\Yii::$app->trigger(Order::EVENT_CREATED, $event);
$t->commit();
}catch (Exception $exception){
$t->rollBack();
throw $exception;
}
return ['order_id' => $order->id];
}
public function saves()
{
if (!$this->validate()) {
throw new Exception($this->getErrorMsg());
}
//咨询的医生
$doctor = ServiceUser::find()->where([
'id' => $this->doctor_id,
'is_delete' => 0,
'status' => UserStatusEnum::OK
])->with('docService')->one();
if(!$doctor){
throw new Exception('医生不存在');
}
switch ($this->type){
case 1:
if(!$doctor->docService->image_limit_status){
throw new Exception('医生未开通图文问诊服务');
}
$t = \Yii::$app->db->beginTransaction();
try {
$UserInquiry = new UserInquiry();
$UserInquiry->attributes = $this->attributes;
$UserInquiry->su_id = $this->doctor_id;
$UserInquiry->up_id=$this->patient_id;
$UserInquiry->store_id=$this->store_id;
$UserInquiry->user_id = \Yii::$app->user->identity->id;
$UserInquiry->patient_data = json_encode($this->patient_data);
$UserInquiry->saveOrFail();
//医生患者
$DoctorPatient=new DoctorPatient();
$DoctorPatient->user_id=\Yii::$app->user->identity->id;
$DoctorPatient->su_id=$this->doctor_id;
$DoctorPatient->up_id=$this->patient_id;
$data=$this->patient_data;
$DoctorPatient->name=$data['name'];
$DoctorPatient->avatar=$data['avatar']??'';
$DoctorPatient->id_card=$data['id_card'];
$DoctorPatient->sex=$data['sex'];
$DoctorPatient->saveOrFail();
//创建订单
$order = new Order();
$order->user_id = \Yii::$app->user->identity->id;
$order->su_id = $this->doctor_id;
$order->up_id=$this->patient_id;
$order->type = $this->type;
$order->ui_id = $UserInquiry->id;
$order->store_id=$this->store_id;
$order->order_no = FuncHelper::generate_order_no('SN');
$order->total_pay_price = $doctor->docService->register_price;
$order->saveOrFail();
$event = new OrderEvent();//触发订单创建事件
$event->order = $order;
$event->sender = $this;
\Yii::$app->trigger(Order::EVENT_CREATED, $event);
$t->commit();
}catch (Exception $exception){
$t->rollBack();
throw $exception;
}
return ['order_id' => $order->id];
case 2:
if(!$doctor->docService->video_limit_status){
throw new Exception('医生未开通视频问诊服务');
}
$t = \Yii::$app->db->beginTransaction();
try {
$UserInquiry = new UserInquiry();
$UserInquiry->attributes = $this->attributes;
$UserInquiry->su_id = $this->doctor_id;
$UserInquiry->up_id=$this->patient_id;
$UserInquiry->user_id = \Yii::$app->user->identity->id;
$UserInquiry->store_id = $this->store_id;
$UserInquiry->patient_data = json_encode($this->patient_data);
$UserInquiry->saveOrFail();
//创建订单
$order = new Order();
$order->user_id = \Yii::$app->user->identity->id;
$order->su_id = $this->doctor_id;
$order->up_id=$this->patient_id;
$order->type = $this->type;
$order->ui_id = $UserInquiry->id;
$order->store_id=$this->store_id;
$order->order_no = FuncHelper::generate_order_no('SN');
$order->saveOrFail();
//医生患者
$DoctorPatient=new DoctorPatient();
$DoctorPatient->user_id=\Yii::$app->user->identity->id;
$DoctorPatient->su_id=$this->doctor_id;
$DoctorPatient->up_id=$this->patient_id;
$data=$this->patient_data;
$DoctorPatient->name=$data['name'];
$DoctorPatient->avatar=$data['avatar']??'';
$DoctorPatient->id_card=$data['id_card'];
$DoctorPatient->sex=$data['sex'];
$DoctorPatient->saveOrFail();
//创建视频问诊视频通话信息
$OrderVideoInfo=new OrderVideoInfo();
$OrderVideoInfo->order_id=$order->id;
$OrderVideoInfo->user_id=\Yii::$app->user->identity->getId();
$OrderVideoInfo->su_id=$this->doctor_id;
$OrderVideoInfo->is_limit=1;
$OrderVideoInfo->order_limit_minutes=10;
$OrderVideoInfo->left_minutes=10;
$OrderVideoInfo->saveOrFail();
$event = new OrderEvent();//触发订单创建事件
$event->order = $order;
$event->sender = $this;
\Yii::$app->trigger(Order::EVENT_CREATED, $event);
$t->commit();
}catch (Exception $exception){
$t->rollBack();
throw $exception;
}
return ['order_id' => $order->id];
}
}
}