更新
This commit is contained in:
@@ -6,11 +6,13 @@ namespace app\adminapi\controller\stats;
|
||||
|
||||
use app\adminapi\controller\BaseAdminController;
|
||||
use app\adminapi\lists\stats\AutoAssignLogLists;
|
||||
use app\adminapi\logic\stats\AutoAssignLogLogic;
|
||||
|
||||
/**
|
||||
* 待分配诊单自动指派日志
|
||||
*
|
||||
* - GET stats.autoAssignLog/lists 日志列表(每条待指派诊单一行:分配结果 + 原因)
|
||||
* - GET stats.autoAssignLog/lists 日志列表
|
||||
* - POST stats.autoAssignLog/rollback 批量回退已自动分配的医助
|
||||
*/
|
||||
class AutoAssignLogController extends BaseAdminController
|
||||
{
|
||||
@@ -18,4 +20,25 @@ class AutoAssignLogController extends BaseAdminController
|
||||
{
|
||||
return $this->dataLists(new AutoAssignLogLists());
|
||||
}
|
||||
|
||||
public function rollback()
|
||||
{
|
||||
$ids = $this->request->post('ids', []);
|
||||
if (!is_array($ids)) {
|
||||
$ids = [$ids];
|
||||
}
|
||||
$result = AutoAssignLogLogic::rollback($ids, $this->adminId, $this->adminInfo);
|
||||
if ($result === false) {
|
||||
return $this->fail(AutoAssignLogLogic::getError());
|
||||
}
|
||||
|
||||
$msg = sprintf('回退成功 %d 条', (int) ($result['success'] ?? 0));
|
||||
$failed = (int) ($result['failed'] ?? 0);
|
||||
if ($failed > 0) {
|
||||
$msg .= sprintf(',跳过/失败 %d 条', $failed);
|
||||
}
|
||||
|
||||
// show=0:由前端按 success/failed 明细提示,避免与部分失败警告重复
|
||||
return $this->success($msg, $result, 1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ use think\facade\Db;
|
||||
* 待分配诊单自动指派日志列表
|
||||
*
|
||||
* 数据来源:tcm_diagnosis_auto_assign_log(定时命令 tcm:auto-assign-pending 写入)
|
||||
* 筛选:run_date(执行日期)/ action(1=已分配 0=未分配)/ assistant_id / keyword(患者姓名、手机号、医助姓名,纯数字兼容诊单ID)
|
||||
* 筛选:run_date / create_time 区间 / action / keyword / rollback 状态
|
||||
*/
|
||||
class AutoAssignLogLists extends BaseAdminDataLists implements ListsSearchInterface
|
||||
{
|
||||
@@ -49,6 +49,17 @@ class AutoAssignLogLists extends BaseAdminDataLists implements ListsSearchInterf
|
||||
$row['action_text'] = (int) ($row['action'] ?? 0) === 1 ? '已分配' : '未分配';
|
||||
$row['tier_text'] = self::TIER_LABELS[(string) ($row['tier'] ?? '')] ?? '';
|
||||
$row['visit2_rate'] = $row['visit2_rate'] !== null ? (float) $row['visit2_rate'] : null;
|
||||
|
||||
$rbTs = (int) ($row['rollback_time'] ?? 0);
|
||||
$row['rollback_time_text'] = $rbTs > 0 ? date('Y-m-d H:i:s', $rbTs) : '';
|
||||
$row['is_rollback'] = $rbTs > 0 ? 1 : 0;
|
||||
$row['can_rollback'] = ((int) ($row['action'] ?? 0) === 1 && $rbTs === 0) ? 1 : 0;
|
||||
if ($rbTs > 0) {
|
||||
$row['rollback_status_text'] = '已回退'
|
||||
. (($row['rollback_admin_name'] ?? '') !== '' ? (' · ' . $row['rollback_admin_name']) : '');
|
||||
} else {
|
||||
$row['rollback_status_text'] = ((int) ($row['action'] ?? 0) === 1) ? '可回退' : '—';
|
||||
}
|
||||
}
|
||||
unset($row);
|
||||
|
||||
@@ -91,6 +102,46 @@ class AutoAssignLogLists extends BaseAdminDataLists implements ListsSearchInterf
|
||||
$query->where('run_date', '<=', $endDate);
|
||||
}
|
||||
|
||||
// 记录时间(create_time)区间:支持 Y-m-d 或 Y-m-d H:i:s
|
||||
$startTs = $this->parseTimeParam((string) ($this->params['start_time'] ?? ''), false);
|
||||
if ($startTs > 0) {
|
||||
$query->where('create_time', '>=', $startTs);
|
||||
}
|
||||
$endTs = $this->parseTimeParam((string) ($this->params['end_time'] ?? ''), true);
|
||||
if ($endTs > 0) {
|
||||
$query->where('create_time', '<=', $endTs);
|
||||
}
|
||||
|
||||
$rollback = trim((string) ($this->params['is_rollback'] ?? ''));
|
||||
if ($rollback === '1') {
|
||||
$query->where('rollback_time', '>', 0);
|
||||
} elseif ($rollback === '0') {
|
||||
$query->where('rollback_time', '=', 0);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $endOfDay 仅日期时是否取当天结束
|
||||
*/
|
||||
private function parseTimeParam(string $raw, bool $endOfDay): int
|
||||
{
|
||||
$raw = trim($raw);
|
||||
if ($raw === '') {
|
||||
return 0;
|
||||
}
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $raw) === 1) {
|
||||
return (int) strtotime($raw . ($endOfDay ? ' 23:59:59' : ' 00:00:00'));
|
||||
}
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}(:\d{2})?$/', $raw) === 1) {
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $raw) === 1) {
|
||||
$raw .= $endOfDay ? ':59' : ':00';
|
||||
}
|
||||
|
||||
return (int) strtotime($raw);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user