success('中医诊单控制器可以访问', [ 'controller' => 'TcmDiagnosisController', 'namespace' => __NAMESPACE__, 'class' => __CLASS__, 'method' => __METHOD__ ]); } /** * @notes 诊单列表 * @return \think\response\Json */ public function lists() { return $this->dataLists(new DiagnosisLists()); } /** * @notes 医助理诊单统计(按部门、按人) * @return \think\response\Json */ public function assistantDiagnosisStats() { $params = $this->request->get(); $result = DiagnosisLogic::assistantDiagnosisStats($params); return $this->data($result); } /** * @notes 添加诊单 * @return \think\response\Json */ public function add() { $params = (new DiagnosisValidate())->post()->goCheck('add'); $result = DiagnosisLogic::add($params); if ($result) { return $this->success('添加成功', ['id' => $result], 1, 1); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 编辑诊单 * @return \think\response\Json */ public function edit() { $params = (new DiagnosisValidate())->post()->goCheck('edit'); $result = DiagnosisLogic::edit($params); if ($result) { return $this->success('编辑成功', [], 1, 1); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 删除诊单 * @return \think\response\Json */ public function delete() { $params = (new DiagnosisValidate())->post()->goCheck('id'); $result = DiagnosisLogic::delete($params); if ($result) { return $this->success('删除成功', [], 1, 1); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 诊单详情 * @return \think\response\Json */ public function detail() { $params = (new DiagnosisValidate())->goCheck('id'); $result = DiagnosisLogic::detail($params); return $this->data($result); } /** * @notes 诊单详情(患者端) * @return \think\response\Json */ public function diagnosisDetail() { $params = $this->request->get(); if (empty($params['id'])) { return $this->fail('诊单ID不能为空'); } if (empty($params['user_id'])) { return $this->fail('用户ID不能为空'); } $result = DiagnosisLogic::diagnosisDetail($params); if ($result) { return $this->data($result); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 检查手机号是否重复 * @return \think\response\Json */ public function checkPhone() { $params = $this->request->post(); $result = DiagnosisLogic::checkPhone($params); return $this->data($result); } /** * @notes 检查身份证号是否重复 * @return \think\response\Json */ public function checkIdCard() { $params = $this->request->post(); $result = DiagnosisLogic::checkIdCard($params); return $this->data($result); } /** * @notes 指派医助 * @return \think\response\Json */ public function assign() { $params = $this->request->post(); // 验证参数 if (empty($params['id'])) { return $this->fail('诊单ID不能为空'); } if (!isset($params['assistant_id'])) { return $this->fail('请选择医助'); } $result = DiagnosisLogic::assign($params); if ($result) { return $this->success('指派成功', [], 1, 1); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 获取通话签名 * @return \think\response\Json */ public function getCallSignature() { $params = $this->request->post(); if (empty($params['diagnosis_id'])) { return $this->fail('诊单ID不能为空'); } if (empty($params['patient_id'])) { return $this->fail('患者ID不能为空'); } // 传递当前管理员ID $params['admin_id'] = $this->adminId; $result = DiagnosisLogic::getCallSignature($params); if ($result) { return $this->data($result); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 发起通话 * @return \think\response\Json */ public function startCall() { $params = $this->request->post(); if (empty($params['diagnosis_id'])) { return $this->fail('诊单ID不能为空'); } // 传递当前管理员ID $params['admin_id'] = $this->adminId; $result = DiagnosisLogic::startCall($params); if ($result) { return $this->success('发起通话成功', [], 1, 1); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 结束通话 * @return \think\response\Json */ public function endCall() { $params = $this->request->post(); if (empty($params['diagnosis_id'])) { return $this->fail('诊单ID不能为空'); } // 传递当前管理员ID $params['admin_id'] = $this->adminId; $result = DiagnosisLogic::endCall($params); if ($result) { return $this->success('结束通话成功', [], 1, 1); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 获取通话记录 * @return \think\response\Json */ public function getCallRecords() { $params = $this->request->get(); if (empty($params['diagnosis_id'])) { return $this->fail('诊单ID不能为空'); } $result = DiagnosisLogic::getCallRecords($params); return $this->data($result); } /** * @notes 获取患者通话签名(用于测试) * @return \think\response\Json */ public function getDoctorSignature() { $params = $this->request->get(); if (empty($params['patient_id'])) { return $this->fail('医助理ID不能为空'); } $result = DiagnosisLogic::getDoctorSignature((int)$params['patient_id']); if ($result) { return $this->data($result); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 获取患者通话签名(用于测试) * @return \think\response\Json */ public function getPatientSignature() { $params = $this->request->get(); if (empty($params['patient_id'])) { return $this->fail('患者ID不能为空'); } $result = DiagnosisLogic::getPatientSignature((int)$params['patient_id']); if ($result) { return $this->data($result); } return $this->fail(DiagnosisLogic::getError()); } /** * @notes 获取医助列表 * @return \think\response\Json */ public function getAssistants() { $result = DiagnosisLogic::getAssistants(); return $this->data($result); } /** * @notes 获取医生列表 * @return \think\response\Json */ public function getDoctors() { $result = DiagnosisLogic::getDoctors(); return $this->data($result); } /** * @notes 生成小程序码 * @return \think\response\Json */ public function generateMiniProgramQrcode() { $params = (new DiagnosisValidate())->post()->goCheck('generateQrcode'); $result = DiagnosisLogic::generateMiniProgramQrcode($params); return $this->data($result); } /** * @notes 生成订单小程序码 * @return \think\response\Json */ public function generateOrderQrcode() { $params = $this->request->post(); $params['share_user_id'] = $this->adminId; $result = DiagnosisLogic::generateOrderQrcode($params); if ($result === false) { return $this->fail(DiagnosisLogic::getError()); } return $this->data($result); } /** * @notes 获取企业微信聊天记录 */ public function getWechatChatRecords() { $diagnosisId = $this->request->get('diagnosis_id', 0); $patientId = $this->request->get('patient_id', 0); $pageNo = $this->request->get('page_no', 1); $pageSize = $this->request->get('page_size', 20); if (empty($diagnosisId) && empty($patientId)) { return $this->fail('诊单ID或患者ID不能都为空'); } $query = WechatChatRecord::order('chat_time', 'desc'); if ($diagnosisId) { $query->where('diagnosis_id', $diagnosisId); } if ($patientId) { $query->where('patient_id', $patientId); } $count = (clone $query)->count(); $lists = $query->page($pageNo, $pageSize)->select()->toArray(); return $this->data([ 'lists' => $lists, 'count' => $count, 'page_no' => $pageNo, 'page_size' => $pageSize ]); } /** * @notes 添加企业微信聊天记录(手动录入/同步写入) */ public function addWechatChatRecord() { $params = $this->request->post(); if (empty($params['diagnosis_id']) && empty($params['patient_id'])) { return $this->fail('诊单ID或患者ID不能都为空'); } if (empty($params['content'])) { return $this->fail('内容不能为空'); } $adminInfo = $this->adminInfo; $data = [ 'diagnosis_id' => $params['diagnosis_id'] ?? 0, 'patient_id' => $params['patient_id'] ?? 0, 'staff_userid' => $adminInfo['work_wechat_userid'] ?? ($params['staff_userid'] ?? ''), 'staff_name' => $params['staff_name'] ?? ($adminInfo['name'] ?? ''), 'external_userid' => $params['external_userid'] ?? '', 'external_name' => $params['external_name'] ?? '', 'msg_type' => $params['msg_type'] ?? 'note', 'content' => $params['content'], 'media_url' => $params['media_url'] ?? '', 'chat_time' => $params['chat_time'] ?? time(), 'direction' => $params['direction'] ?? 0, 'create_time' => time(), ]; $record = WechatChatRecord::create($data); return $this->success('添加成功', ['id' => $record->id]); } /** * @notes 删除企业微信聊天记录 */ public function deleteWechatChatRecord() { $id = $this->request->post('id', 0); if (empty($id)) { return $this->fail('记录ID不能为空'); } WechatChatRecord::destroy($id); return $this->success('删除成功'); } /** * @notes 同步企业微信外部联系人信息(查找该患者在企业微信中的跟进人) */ public function getWechatExternalContact() { $patientId = $this->request->get('patient_id', 0); if (empty($patientId)) { return $this->fail('患者ID不能为空'); } $result = DiagnosisLogic::getWechatExternalContact($patientId); if ($result === false) { return $this->fail(DiagnosisLogic::getError()); } return $this->data($result); } /** * @notes 获取会话内容存档开启的成员列表 */ public function getMsgAuditPermitUsers() { $result = DiagnosisLogic::getMsgAuditPermitUsers(); if ($result === false) { return $this->fail(DiagnosisLogic::getError()); } return $this->data($result); } /** * @notes 搜索患者(用于创建订单等场景) * @return \think\response\Json */ public function searchPatient() { $keyword = $this->request->get('keyword', ''); $page_no = $this->request->get('page_no', 1); $page_size = $this->request->get('page_size', 10); if (empty($keyword)) { return $this->success('', ['lists' => [], 'count' => 0]); } $offset = ($page_no - 1) * $page_size; $lists = \app\common\model\tcm\Diagnosis::where('patient_name|phone|id_card', 'like', '%' . $keyword . '%') ->field(['id', 'patient_name', 'phone', 'id_card', 'gender', 'age']) ->limit($offset, $page_size) ->order('id desc') ->select() ->toArray(); $count = \app\common\model\tcm\Diagnosis::where('patient_name|phone|id_card', 'like', '%' . $keyword . '%') ->count(); return $this->success('', [ 'lists' => $lists, 'count' => $count, 'page_no' => $page_no, 'page_size' => $page_size ]); } }