Files
KnowledgeBase/database/seeders/SopTemplateSeeder.php
lizhuoran ef195d1ea0 feat: 创建工厂类和种子数据
- SystemSettingFactory: 系统设置工厂
- TerminalFactory: 终端工厂
- SopTemplateFactory: SOP模板工厂
- SystemSettingSeeder: 系统设置种子数据
- TerminalSeeder: 终端种子数据
- SopTemplateSeeder: SOP模板种子数据
- 更新 DatabaseSeeder 注册新的种子类
2026-03-09 10:07:49 +08:00

237 lines
9.9 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' => ['生产部', '设备部'],
'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></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><ol><li>打开主电源开关</li><li>等待系统自检完成</li><li>按下启动按钮</li><li>观察设备运行状态</li></ol>',
'sort_order' => 3,
'is_required' => true,
],
[
'step_number' => 4,
'title' => '运行状态确认',
'content' => '<p>确认设备正常运行。</p><ul><li>检查仪表显示</li><li>听设备运行声音</li><li>观察有无异常振动</li></ul>',
'sort_order' => 4,
'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,
]);
}
// 为第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' => 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' => ['质检部'],
'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>',
'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' => 'barcode',
],
'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' => 'input',
'task_config' => [
'title' => '输入测量数据',
'fields' => [
['name' => 'length', 'label' => '长度(mm)', 'type' => 'number'],
['name' => 'width', 'label' => '宽度(mm)', 'type' => 'number'],
['name' => 'height', 'label' => '高度(mm)', 'type' => 'number'],
],
],
'validation_rules' => [
'length' => ['required', 'numeric', 'min:0'],
'width' => ['required', 'numeric', 'min:0'],
'height' => ['required', 'numeric', 'min:0'],
],
'timeout_seconds' => 300,
'is_required' => true,
]);
}
}
// 3. 创建一个草稿模板
$this->command->info('创建草稿模板...');
SopTemplate::create([
'name' => '设备维护保养流程(草稿)',
'description' => '设备日常维护保养操作流程,包括清洁、润滑、紧固等内容。',
'category' => '设备维护',
'tags' => ['维护', '保养'],
'version' => '0.1.0',
'status' => 'draft',
'applicable_departments' => ['设备部'],
'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());
}
}