Files
KnowledgeBase/database/seeders/SopTemplateSeeder.php
lizhuoran 06cf30130d refactor: 修改 seeder 数据以适配光束线场景
- DatabaseSeeder: 将分组改为十条光束线(BL02U1-BL16U1)
- 修改文档数据为光束线相关内容
- SopTemplateSeeder: 创建光束线操作相关的 SOP 模板
  - 光束线标准开机流程
  - 用户实验准备标准流程
  - 光束线日常维护流程(草稿)
- TerminalSeeder: 为每条光束线创建智慧屏终端
  - 每条光束线对应一个智慧屏终端
  - 配置光束线专用的 AI 助手提示词
  - 设置合理的在线/离线状态
2026-03-12 17:54:51 +08:00

238 lines
10 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
namespace Database\Seeders;
use App\Models\SopTemplate;
use App\Models\SopStep;
use App\Models\SopInteractiveTask;
use App\Models\User;
use Illuminate\Database\Seeder;
class SopTemplateSeeder extends Seeder
{
public function run(): void
{
$this->command->info('开始创建SOP模板数据...');
// 获取或创建一个用户作为创建者
$user = User::first();
if (!$user) {
$this->command->warn('未找到用户跳过SOP模板创建');
return;
}
// 1. 光束线开机流程
$this->command->info('创建光束线开机流程...');
$template1 = SopTemplate::create([
'name' => '光束线标准开机流程',
'description' => '本流程规定了光束线开机前的检查项目、开机步骤和注意事项,确保光束线安全、正常启动。',
'category' => '光束线操作',
'tags' => ['标准作业', '开机流程', '安全'],
'version' => '1.0.0',
'status' => 'published',
'applicable_departments' => ['BL02U1', 'BL07U', 'BL08U', 'BL13HB', 'BL13U', 'BL14B', 'BL14W', 'BL15U', 'BL16B', 'BL16U1'],
'applicable_positions' => ['操作员', '值班员'],
'published_at' => now()->subMonths(2),
'created_by' => $user->id,
]);
$steps1 = [
[
'step_number' => 1,
'title' => '开机前安全检查',
'content' => '<p>检查光束线周围环境,确保无障碍物和安全隐患。</p><ul><li>检查光束线外观是否完好</li><li>检查安全联锁装置是否正常</li><li>检查急停按钮是否正常</li><li>确认辐射防护门关闭</li></ul>',
'sort_order' => 1,
'is_required' => true,
],
[
'step_number' => 2,
'title' => '真空系统检查',
'content' => '<p>检查真空系统状态。</p><ul><li>确认真空泵运行正常</li><li>检查真空度读数</li><li>检查真空阀门状态</li></ul>',
'sort_order' => 2,
'is_required' => true,
],
[
'step_number' => 3,
'title' => '冷却水系统检查',
'content' => '<p>检查冷却水系统。</p><ul><li>确认冷却水流量正常</li><li>检查水温是否在正常范围</li><li>检查冷却水压力</li></ul>',
'sort_order' => 3,
'is_required' => true,
],
[
'step_number' => 4,
'title' => '启动光束线',
'content' => '<p>按照正确顺序启动光束线。</p><ol><li>打开控制系统</li><li>等待系统自检完成</li><li>启动束流</li><li>观察束流参数</li></ol>',
'sort_order' => 4,
'is_required' => true,
],
[
'step_number' => 5,
'title' => '运行状态确认',
'content' => '<p>确认光束线正常运行。</p><ul><li>检查束流强度</li><li>检查束流位置</li><li>检查各项参数是否在正常范围</li></ul>',
'sort_order' => 5,
'is_required' => true,
],
];
foreach ($steps1 as $stepData) {
$step = SopStep::create(array_merge($stepData, ['sop_template_id' => $template1->id]));
// 为第1步添加确认任务
if ($stepData['step_number'] == 1) {
SopInteractiveTask::create([
'sop_step_id' => $step->id,
'task_type' => 'confirm',
'task_config' => [
'title' => '安全检查确认',
'message' => '我已完成所有安全检查项目,确认无安全隐患',
],
'validation_rules' => [],
'timeout_seconds' => 300,
'is_required' => true,
]);
}
// 为第4步添加拍照任务
if ($stepData['step_number'] == 4) {
SopInteractiveTask::create([
'sop_step_id' => $step->id,
'task_type' => 'photo',
'task_config' => [
'title' => '拍摄控制系统状态',
'message' => '请拍摄控制系统界面照片',
'min_photos' => 1,
'max_photos' => 3,
],
'validation_rules' => [],
'timeout_seconds' => 180,
'is_required' => true,
]);
}
}
// 2. 用户实验准备流程
$this->command->info('创建用户实验准备流程...');
$template2 = SopTemplate::create([
'name' => '用户实验准备标准流程',
'description' => '本流程规定了用户实验前的准备工作、样品安装和参数设置步骤。',
'category' => '实验操作',
'tags' => ['用户实验', '标准作业', '样品准备'],
'version' => '1.0.0',
'status' => 'published',
'applicable_departments' => ['BL02U1', 'BL07U', 'BL08U', 'BL13HB', 'BL13U', 'BL14B', 'BL14W', 'BL15U', 'BL16B', 'BL16U1'],
'applicable_positions' => ['操作员', '实验员'],
'published_at' => now()->subMonth(),
'created_by' => $user->id,
]);
$steps2 = [
[
'step_number' => 1,
'title' => '扫描用户机时单',
'content' => '<p>使用扫码枪扫描用户机时单二维码,获取实验信息。</p>',
'sort_order' => 1,
'is_required' => true,
],
[
'step_number' => 2,
'title' => '样品安全检查',
'content' => '<p>检查样品安全性。</p><ul><li>确认样品无放射性</li><li>确认样品无毒性</li><li>确认样品符合实验要求</li></ul>',
'sort_order' => 2,
'is_required' => true,
],
[
'step_number' => 3,
'title' => '样品安装',
'content' => '<p>将样品安装到样品台。</p><ul><li>调整样品位置</li><li>固定样品</li><li>对准光束中心</li></ul>',
'sort_order' => 3,
'is_required' => true,
],
[
'step_number' => 4,
'title' => '实验参数设置',
'content' => '<p>在控制系统中设置实验参数。</p>',
'sort_order' => 4,
'is_required' => true,
],
];
foreach ($steps2 as $stepData) {
$step = SopStep::create(array_merge($stepData, ['sop_template_id' => $template2->id]));
// 为第1步添加扫码任务
if ($stepData['step_number'] == 1) {
SopInteractiveTask::create([
'sop_step_id' => $step->id,
'task_type' => 'scan',
'task_config' => [
'title' => '扫描机时单二维码',
'scan_type' => 'qrcode',
],
'validation_rules' => [
'pattern' => '^[A-Z0-9]{10,20}$',
],
'timeout_seconds' => 60,
'is_required' => true,
]);
}
// 为第2步添加选择任务
if ($stepData['step_number'] == 2) {
SopInteractiveTask::create([
'sop_step_id' => $step->id,
'task_type' => 'select',
'task_config' => [
'title' => '样品安全检查结果',
'options' => ['通过', '不通过'],
],
'validation_rules' => [],
'timeout_seconds' => 120,
'is_required' => true,
]);
}
// 为第3步添加拍照任务
if ($stepData['step_number'] == 3) {
SopInteractiveTask::create([
'sop_step_id' => $step->id,
'task_type' => 'photo',
'task_config' => [
'title' => '拍摄样品安装照片',
'message' => '请拍摄样品安装完成后的照片',
'min_photos' => 1,
'max_photos' => 2,
],
'validation_rules' => [],
'timeout_seconds' => 180,
'is_required' => true,
]);
}
}
// 3. 创建一个草稿模板
$this->command->info('创建草稿模板...');
SopTemplate::create([
'name' => '光束线日常维护流程(草稿)',
'description' => '光束线日常维护保养操作流程,包括清洁、检查、记录等内容。',
'category' => '设备维护',
'tags' => ['维护', '保养'],
'version' => '0.1.0',
'status' => 'draft',
'applicable_departments' => ['BL02U1', 'BL07U', 'BL08U'],
'applicable_positions' => ['维修工', '技术员'],
'published_at' => null,
'created_by' => $user->id,
]);
$this->command->info('SOP模板数据创建完成');
$this->command->newLine();
$this->command->info('=== 生成的SOP模板摘要 ===');
$this->command->info('总模板数量: ' . SopTemplate::count());
$this->command->info(' - 已发布: ' . SopTemplate::where('status', 'published')->count());
$this->command->info(' - 草稿: ' . SopTemplate::where('status', 'draft')->count());
$this->command->info(' - 已归档: ' . SopTemplate::where('status', 'archived')->count());
$this->command->info('总步骤数量: ' . SopStep::count());
$this->command->info('总交互任务数量: ' . SopInteractiveTask::count());
}
}