108 lines
2.8 KiB
PHP
108 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* 测试时间段生成逻辑
|
|
* 模拟只有上午排班的情况
|
|
*/
|
|
|
|
// 模拟数据库查询结果:只有上午的排班
|
|
$rosters = [
|
|
[
|
|
'id' => 1,
|
|
'doctor_id' => 1,
|
|
'date' => '2026-03-06',
|
|
'period' => 'morning', // 只有上午
|
|
'status' => 1,
|
|
'quota' => 20
|
|
]
|
|
];
|
|
|
|
echo "模拟排班数据:\n";
|
|
print_r($rosters);
|
|
echo "\n";
|
|
|
|
// 模拟生成时间段的逻辑
|
|
$slots = [];
|
|
|
|
foreach ($rosters as $roster) {
|
|
if ($roster['status'] != 1) {
|
|
echo "跳过非出诊排班: roster_id={$roster['id']}\n";
|
|
continue;
|
|
}
|
|
|
|
$periodValue = $roster['period'];
|
|
echo "处理排班: roster_id={$roster['id']}, period={$periodValue}\n";
|
|
|
|
$startHour = null;
|
|
$endHour = null;
|
|
|
|
if ($periodValue == 1 || $periodValue === 'morning' || $periodValue === '上午') {
|
|
$startHour = 9;
|
|
$endHour = 12;
|
|
echo " -> 识别为上午时段 (9:00-12:00)\n";
|
|
} elseif ($periodValue == 2 || $periodValue === 'afternoon' || $periodValue === '下午') {
|
|
$startHour = 14;
|
|
$endHour = 18;
|
|
echo " -> 识别为下午时段 (14:00-18:00)\n";
|
|
} else {
|
|
echo " -> 未知的时段值,跳过\n";
|
|
continue;
|
|
}
|
|
|
|
if ($startHour === null || $endHour === null) {
|
|
echo " -> 错误:时段参数未设置\n";
|
|
continue;
|
|
}
|
|
|
|
// 生成15分钟间隔的时间段
|
|
for ($hour = $startHour; $hour < $endHour; $hour++) {
|
|
for ($minute = 0; $minute < 60; $minute += 15) {
|
|
$time = sprintf('%02d:%02d', $hour, $minute);
|
|
$slots[] = [
|
|
'time' => $time,
|
|
'available' => true,
|
|
'quota' => 1,
|
|
'period' => $periodValue
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
echo "\n生成的时间段总数: " . count($slots) . "\n";
|
|
|
|
// 统计上午和下午的时间段
|
|
$morningCount = 0;
|
|
$afternoonCount = 0;
|
|
|
|
foreach ($slots as $slot) {
|
|
if ($slot['time'] < '12:00') {
|
|
$morningCount++;
|
|
} elseif ($slot['time'] >= '14:00') {
|
|
$afternoonCount++;
|
|
}
|
|
}
|
|
|
|
echo "上午时间段数量: {$morningCount}\n";
|
|
echo "下午时间段数量: {$afternoonCount}\n";
|
|
|
|
echo "\n前5个时间段:\n";
|
|
foreach (array_slice($slots, 0, 5) as $slot) {
|
|
echo " {$slot['time']} - period: {$slot['period']}\n";
|
|
}
|
|
|
|
echo "\n后5个时间段:\n";
|
|
foreach (array_slice($slots, -5) as $slot) {
|
|
echo " {$slot['time']} - period: {$slot['period']}\n";
|
|
}
|
|
|
|
echo "\n预期结果:\n";
|
|
echo " - 总数应该是 12 (9:00-11:45, 每15分钟一个)\n";
|
|
echo " - 上午时间段: 12\n";
|
|
echo " - 下午时间段: 0\n";
|
|
echo " - 最后一个时间段应该是 11:45\n";
|
|
|
|
if (count($slots) == 12 && $morningCount == 12 && $afternoonCount == 0) {
|
|
echo "\n✓ 测试通过!逻辑正确。\n";
|
|
} else {
|
|
echo "\n✗ 测试失败!逻辑有问题。\n";
|
|
}
|