Files
zyt/server/app/adminapi/controller/tcm/RevisitDueController.php
T
2026-10-15 11:03:54 +08:00

127 lines
4.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
namespace app\adminapi\controller\tcm;
use app\adminapi\controller\BaseAdminController;
use app\adminapi\lists\tcm\RevisitDueLists;
use app\adminapi\logic\tcm\RevisitDueLogic;
use app\adminapi\validate\tcm\RevisitDueValidate;
/**
* 复诊到期弹窗控制器(需求 4:到期未面诊弹窗 + 延迟处理;P2 主管团队视图 lists / logs)
*
* URL 自动映射 /adminapi/tcm.revisitDue/<action>,权限串 tcm.revisitDue/<action>,
* 弹窗六个 action 在菜单登记于 server/sql/1.9.20261012/05_add_revisit_due_menu.sql,
* 主管视图 lists(C 类页面 /stats/revisit_due)/ logs(A 类)登记于 08_add_revisit_due_team_menu.sql,
* 否则 AuthMiddleware 对未登记接口放行。归属校验在 RevisitDueLogic 内完成,lists 的数据范围由 RevisitDueLists 处理。
*
* @package app\adminapi\controller\tcm
*/
class RevisitDueController extends BaseAdminController
{
/**
* @notes 主管团队视图:到期跟进列表(分页 / 筛选 / 导出 export=1|2),数据范围按角色 data_scope
*/
public function lists()
{
return $this->dataLists(new RevisitDueLists());
}
/**
* @notes 主管团队视图:某条提醒的事件流水(需在当前账号数据范围内)
*/
public function logs()
{
$params = (new RevisitDueValidate())->get()->goCheck('logs');
$result = RevisitDueLogic::logs((int) $params['due_id'], $this->adminId, $this->adminInfo);
if ($result === false) {
return $this->fail(RevisitDueLogic::getError() ?: '流水读取失败');
}
return $this->data($result);
}
/**
* @notes 弹窗待办(轮询):本人到期未挂号 / 过号且已到提醒时刻的项 + 汇总计数
*/
public function pending()
{
return $this->data(RevisitDueLogic::pending($this->adminId, $this->adminInfo));
}
/**
* @notes 仅计数(不更新弹出时间)
*/
public function summary()
{
return $this->data(RevisitDueLogic::summary($this->adminId, $this->adminInfo));
}
/**
* @notes 延迟一次(幂等:affected=0 也返回当前行)
*/
public function snooze()
{
$params = (new RevisitDueValidate())->post()->goCheck('snooze');
$result = RevisitDueLogic::snooze((int) $params['id'], $this->adminId, $this->adminInfo);
if ($result === false) {
return $this->fail(RevisitDueLogic::getError() ?: '延迟失败');
}
return $this->success($result['message'], $result['item'], 1, 1);
}
/**
* @notes 批量延迟(仅 escalation_level<=1 的项)
*/
public function snoozeAll()
{
$params = (new RevisitDueValidate())->post()->goCheck('snoozeAll');
$result = RevisitDueLogic::snoozeAll((array) $params['ids'], $this->adminId, $this->adminInfo);
return $this->success($result['message'], $result, 1, 1);
}
/**
* @notes 已联系:记录患者承诺复诊日
*/
public function contact()
{
$params = (new RevisitDueValidate())->post()->goCheck('contact');
$result = RevisitDueLogic::contact(
(int) $params['id'],
(string) $params['promised_date'],
(string) ($params['remark'] ?? ''),
$this->adminId,
$this->adminInfo
);
if ($result === false) {
return $this->fail(RevisitDueLogic::getError() ?: '记录失败');
}
return $this->success($result['message'], $result['item'], 1, 1);
}
/**
* @notes 人工关闭(原因 lost|other + 说明必填)
*/
public function close()
{
$params = (new RevisitDueValidate())->post()->goCheck('close');
$result = RevisitDueLogic::close(
(int) $params['id'],
(string) $params['reason'],
(string) ($params['remark'] ?? ''),
$this->adminId,
$this->adminInfo
);
if ($result === false) {
return $this->fail(RevisitDueLogic::getError() ?: '关闭失败');
}
return $this->success($result['message'], $result['item'], 1, 1);
}
}