Files
xk-api-yii/service/modules/v1/controllers/DoctorWorkController.php

294 lines
11 KiB
PHP

<?php
namespace service\modules\v1\controllers;
use common\core\BaseAppController;
use common\enums\RegisterEnum;
use common\helpers\FuncHelper;
use common\helpers\StringHelper;
use common\models\oldDb\DoctorIdentity;
use common\models\oldDb\DoctorInfo;
use common\models\oldDb\DoctorPracticing;
use common\models\oldDb\DoctorService;
use common\models\oldDb\Register;
use common\models\oldDb\Store;
use common\models\oldDb\StoreDoctor;
use common\models\oldDb\User;
use common\models\oldDb\UserComment;
use common\models\oldDb\UserPatient;
use common\services\UploadService;
use common\services\WechatService;
use service\models\ServiceUser;
use yii\db\Exception;
/**
* @doc-module 医生工作台
*/
class DoctorWorkController extends BaseAppController
{
/**
* @doc-name 医生工作台基本信息
* @doc-author hyl
* @doc-return mixed @DoctorInfo{avatar-string-头像,name-string-姓名,good_at-string-擅长,intro-string-简介,qr_code-string-我的名片,@Title{name-string-职称},@Hospital{name-string-医院},@Depart{name-string-科室},@User{status-int-状态0待激活1待审核2已认证3拒绝(需要修改激活资料)}} 基本信息
* @doc-return mixed @DoctorIdentity{*} 认证信息
* @doc-return mixed @DoctorPracticing{*} 执业信息
* @doc-return mixed @Store{store_id-int-门店id,@Store{id-int-id,name-string-名字}} 门店信息
* @doc-return int wait_accept 待接诊
* @doc-return int accepting 接诊中
* @doc-return string sex 性别
*/
public function actionInfo()
{
try {
$post= \Yii::$app->request->post();
$store = Store::findOne(\Yii::$app->store);
if(!$store)throw new Exception('门店不存在');
$DoctorInfo= DoctorInfo::find()
->where(['su_id' => \Yii::$app->user->identity->id])
->with(['title', 'hospital','depart','user'])
->one();
$DoctorIdentity= DoctorIdentity::find()
->where(['su_id' => \Yii::$app->user->identity->id])
->one();
$DoctorPracticing= DoctorPracticing::find()
->where(['su_id' => \Yii::$app->user->identity->id])
->one();
if(!$DoctorInfo || !$DoctorIdentity || !$DoctorPracticing){
throw new Exception('医生信息错误');
}
$storeDoctor = StoreDoctor::find()->where([
'su_id' => \Yii::$app->user->identity->getId(),
'store_id' => \Yii::$app->store
])->one();
if(!$storeDoctor)throw new Exception('非该门店医生');
//门店医生小程序码
if(!$storeDoctor->qr_code){
$response = WechatService::getInstance()->app->app_code->getUnlimit('su_id='.\Yii::$app->user->identity->getId().'&store_id='.\Yii::$app->store, [
'page' => 'subPackages/doctor/doctor-detail',
'check_path' => false,
]);
if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
$path = 'uploads/doctor_code/' . date('Ymd');
$filename = $response->save('uploads/doctor_code/' . date('Ymd'), 'doctor_code_' . $DoctorInfo->su_id.\Yii::$app->store);
$realpath = FuncHelper::getRealFilepath('service', $path . '/' . $filename);
$uploadService = new UploadService();
$url = $uploadService->saveFile($realpath);
$storeDoctor->qr_code = $url;
$storeDoctor->save();
}
}
//门店医生在线状态
if($storeDoctor->is_online != 1){
StoreDoctor::updateAll(['is_online' => 0],['su_id' => \Yii::$app->user->identity->getId(), 'is_online' => 1]);
$storeDoctor->is_online = 1;
$storeDoctor->last_login_time = time();
$storeDoctor->save();
}
$relates = $DoctorInfo->getRelatedRecords();
$DoctorInfo = $DoctorInfo->toArray();
$DoctorInfo = array_merge($DoctorInfo, $relates);
$wait_accept=Register::find()->where([
'service_user_id'=> \Yii::$app->user->identity->id,
'store_id'=> $post['store_id'],
'status'=>RegisterEnum::WAIT,
'is_pay'=>1,
'type' => 0,
'is_cancel'=>0,
'is_delete'=>0
])->count();
$accepting = Register::find()->where([
'service_user_id'=> \Yii::$app->user->identity->id,
'store_id'=> $post['store_id'],
'status'=>RegisterEnum::ACCEPTING,
'is_pay'=>1,
'is_cancel'=>0,
'is_delete'=>0
])->count();
// TODO 这里
$idcard= DoctorInfo::find()->select(['idcard'])->where(['su_id'=>\Yii::$app->user->id])->one();
$number = substr($idcard['idcard'], strlen($idcard['idcard']) - 2, 1);
$sex=$number % 2 == 0?'女':'男';
#医生开通的服务
$doctor_service = DoctorService::find()->where(['su_id' => \Yii::$app->user->identity->id])->asArray()->one();
$DoctorInfo['qr_code'] = $storeDoctor->qr_code;
$ServiceUser=ServiceUser::find()->select(['reason','status'])->where(['id'=>\Yii::$app->user->identity->id])->one();
return [
'store'=>[
'store_id' => $store->id,
'store' => [
'id' => $store->id,
'name' => $store->name,
'see_rate'=>$store->see_rate,
]
],
'DoctorInfo'=>$DoctorInfo,
'doctor_service'=>$doctor_service,
'DoctorIdentity'=>$DoctorIdentity,
'DoctorPracticing'=>$DoctorPracticing,
'wait_accept'=>$wait_accept,
'accepting'=>$accepting,
'sex'=>$sex,
'ServiceUser'=>$ServiceUser
];
} catch (\Exception $e) {
return [
'code' => 1,
'msg' => $e->getMessage(),
'data' => [
'line' => $e->getLine(),
]
];
}
}
/**
* @doc-name 我的评价基础信息(医生端)
*/
public function actionCommentMain()
{
$allCount = (int)UserComment::find()
->where([
'su_id' => \Yii::$app->user->identity->id,
])
->count();
$highCount = (int)UserComment::find()
->where(['>=', 'score', 4])
->where([
'su_id' => \Yii::$app->user->identity->id,
])
->count();
$lowCount = (int)UserComment::find()
->where(['<=', 'score', 2])
->where([
'su_id' => \Yii::$app->user->identity->id,
])
->count();
$scoreAvg = UserComment::find()
->where([
'su_id' => \Yii::$app->user->identity->id,
])
->average('score');
$scoreAvg = ceil($scoreAvg * 2) / 2;
return [
'all_count' => $allCount,
'high_count' => $highCount,
'low_count' => $lowCount,
'score_avg' => $scoreAvg,
];
}
/**
* @doc-name 我的评价(医生端)
* @doc-param string type high高分low低分
* @doc-return mixed @List{score-int-分数,comment-string-评价内容,created_at-string-评价时间,nickname-string-用户隐私姓名} 评价信息
* @doc-return mixed @Pagination{total-int-总数据,totalPage-int-总页数,pageSize-int-每页数据} 分页信息
*/
public function actionComments()
{
$type = \Yii::$app->request->post('type');
$query = UserComment::find()
->select(['id', 'u_id', 'score', 'comment', 'created_at'])
->with(['user'])
->orderBy(['created_at' => SORT_DESC])
->where([
'su_id' => \Yii::$app->user->identity->id,
]);
if ($type == 'high') {
$query->andWhere(['>=', 'score', 4]);
} elseif ($type == 'low') {
$query->andWhere(['<=', 'score', 2]);
}
$this->field = [
UserComment::class => [
'id', 'u_id', 'score', 'comment', 'created_at',
'nickname' => function (UserComment $comment) {
$user = User::find()
->select(['id', 'nickname'])
->where(['id' => $comment->u_id])
->one();
$nickname = $user->nickname ?? '微信用户';
if ($nickname) {
$nickname = StringHelper::string_hide_cut($nickname);
}
return $nickname;
},
'avatar'=>function($m){
$avatar= UserPatient::find()->where([
'id'=>$m->u_id,
// 'user_id'=>$m->user_id
])->select('avatar')->one();
return $avatar??'https://tenfei03.cfp.cn/creative/vcg/veer/1600water/veer-105516317.jpg';
}
],
];
return $this->create($query,$type);
}
/**
* @doc-name 收入明细
* @doc-return string name 患者姓名 / optional
* @doc-return mixed @List{id-int-挂号id,avatar-string-头像,name-string-名字,price-float-金额,pay_time-string-收款时间} 信息
* @doc-return mixed @Pagination{total-int-总数据,totalPage-int-总页数,pageSize-int-每页多少条} 分页信息
*/
public function actionIncomeDetail()
{
$post=\Yii::$app->request->post();
$query=Register::find()->where([
'store_id'=>\Yii::$app->store,
'is_pay'=>0,
'service_user_id'=>\Yii::$app->user->id
])->with('patient');
if (!empty($post['name'])){
$name=$post['name'];
$query->joinWith(['patient' => function ($p) use ($name) {
$p->alias('p');
$p->andWhere(['like', 'p.name', $name]);
}]);
}
$this->field=[
Register::class=>[
'id','avatar'=>'patient.avatar',
'name'=>'patient.name',
'price','pay_time'
]
];
return $this->create($query,$post);
}
/**
* @doc-name 编辑资料
* @doc-param string avatar 头像 / optional
*/
public function actionEditInfo()
{
$post = \Yii::$app->request->post();
$DoctorInfo=DoctorInfo::find()->where([
'su_id'=>\Yii::$app->user->id
])->one();
if (!$DoctorInfo) throw new Exception('医生信息不存在');
$DoctorInfo->avatar=$post['avatar'];
if (!$DoctorInfo->saveOrFail()){
throw new Exception('编辑失败');
}
return ['编辑成功'];
}
}