更新
This commit is contained in:
@@ -11,8 +11,10 @@ use app\adminapi\lists\firstvisit\MyPatientProgressLists;
|
||||
use app\adminapi\logic\auth\AuthLogic;
|
||||
use app\adminapi\logic\doctor\AppointmentLogic;
|
||||
use app\adminapi\logic\firstvisit\MyPatientLogic;
|
||||
use app\adminapi\logic\tcm\DiagnosisLogic;
|
||||
use app\adminapi\logic\tcm\PrescriptionOrderLogic;
|
||||
use app\adminapi\validate\doctor\AppointmentValidate;
|
||||
use app\adminapi\validate\tcm\DiagnosisValidate;
|
||||
use app\adminapi\validate\tcm\PrescriptionOrderValidate;
|
||||
use app\common\model\doctor\Appointment;
|
||||
use app\common\model\tcm\PrescriptionOrder;
|
||||
@@ -52,6 +54,74 @@ class MyPatientController extends BaseAdminController
|
||||
return $this->dataLists(new MyPatientProgressLists());
|
||||
}
|
||||
|
||||
/** 当前账号数据范围内可被指派的医助。 */
|
||||
public function assistants()
|
||||
{
|
||||
if (!$this->hasPagePermission() || !$this->hasOriginalPermission('tcm.diagnosis/assign')) {
|
||||
return $this->fail('权限不足,无法获取医助列表');
|
||||
}
|
||||
|
||||
return $this->data(DiagnosisLogic::getAssistants($this->adminId, $this->adminInfo));
|
||||
}
|
||||
|
||||
/** 从“我的患者”指派医助,先校验患者行级数据范围和目标医助范围。 */
|
||||
public function assign()
|
||||
{
|
||||
if (!$this->hasPagePermission() || !$this->hasOriginalPermission('tcm.diagnosis/assign')) {
|
||||
return $this->fail('权限不足,无法指派患者');
|
||||
}
|
||||
|
||||
$params = $this->request->post();
|
||||
$diagnosisId = (int) ($params['id'] ?? 0);
|
||||
$assistantId = (int) ($params['assistant_id'] ?? 0);
|
||||
if (!MyPatientLogic::canAccessDiagnosis($diagnosisId, $this->adminId, $this->adminInfo)) {
|
||||
return $this->fail('患者不存在或无权操作');
|
||||
}
|
||||
if ($assistantId <= 0 || !$this->canAssignToAssistant($assistantId)) {
|
||||
return $this->fail('所选医助不在当前可指派范围内');
|
||||
}
|
||||
|
||||
$result = DiagnosisLogic::assign([
|
||||
'id' => $diagnosisId,
|
||||
'assistant_id' => $assistantId,
|
||||
'is_inherit' => (int) ($params['is_inherit'] ?? 0) === 1 ? 1 : 0,
|
||||
]);
|
||||
if ($result === false) {
|
||||
return $this->fail(DiagnosisLogic::getError());
|
||||
}
|
||||
|
||||
return $this->success('指派成功');
|
||||
}
|
||||
|
||||
/** 从“我的患者”补全身份证,复用诊单身份证校验和年龄计算。 */
|
||||
public function fillIdCard()
|
||||
{
|
||||
if (!$this->hasPagePermission() || !$this->hasOriginalPermission('tcm.diagnosis/edit')) {
|
||||
return $this->fail('权限不足,无法补全身份证');
|
||||
}
|
||||
|
||||
$params = (new DiagnosisValidate())->post()->goCheck('fillIdCard');
|
||||
$diagnosisId = (int) ($params['id'] ?? 0);
|
||||
if (!MyPatientLogic::canAccessDiagnosis($diagnosisId, $this->adminId, $this->adminInfo)) {
|
||||
return $this->fail('患者不存在或无权操作');
|
||||
}
|
||||
|
||||
$duplicate = DiagnosisLogic::checkIdCard([
|
||||
'id' => $diagnosisId,
|
||||
'id_card' => trim((string) ($params['id_card'] ?? '')),
|
||||
]);
|
||||
if (!empty($duplicate['exists'])) {
|
||||
return $this->fail((string) ($duplicate['message'] ?? '该身份证号已存在'));
|
||||
}
|
||||
|
||||
$result = DiagnosisLogic::fillIdCard($params);
|
||||
if ($result === false) {
|
||||
return $this->fail(DiagnosisLogic::getError());
|
||||
}
|
||||
|
||||
return $this->success('补全成功,年龄已自动更新');
|
||||
}
|
||||
|
||||
/** 当前患者范围内的订单详情;仍要求原订单详情权限。 */
|
||||
public function orderDetail()
|
||||
{
|
||||
@@ -384,6 +454,17 @@ class MyPatientController extends BaseAdminController
|
||||
return $order;
|
||||
}
|
||||
|
||||
private function canAssignToAssistant(int $assistantId): bool
|
||||
{
|
||||
foreach (DiagnosisLogic::getAssistants($this->adminId, $this->adminInfo) as $assistant) {
|
||||
if ((int) ($assistant['id'] ?? 0) === $assistantId) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/** @param array<string,mixed> $params @param array<int,string> $keys */
|
||||
private function onlyParams(array $params, array $keys): array
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user