feat: 创建工厂类和种子数据

- SystemSettingFactory: 系统设置工厂
- TerminalFactory: 终端工厂
- SopTemplateFactory: SOP模板工厂
- SystemSettingSeeder: 系统设置种子数据
- TerminalSeeder: 终端种子数据
- SopTemplateSeeder: SOP模板种子数据
- 更新 DatabaseSeeder 注册新的种子类
This commit is contained in:
2026-03-09 10:07:49 +08:00
parent 9d0055138c
commit ef195d1ea0
7 changed files with 913 additions and 0 deletions

View File

@@ -0,0 +1,236 @@
<?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());
}
}