You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
4.3 KiB

<?php
use App\Models\Adverse;
use App\Models\Orders;
use App\Models\Project;
use Carbon\Carbon;
use Illuminate\Database\Seeder;
class AdverseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// 获取项目列表
$projects = Project::all();
if ($projects->isEmpty()) {
$this->command->info('没有找到项目数据,请先创建项目');
return;
}
// 不良事件类型
$types = [
Adverse::TYPE_SAFETY,
Adverse::TYPE_COMPLAINT,
Adverse::TYPE_OTHER
];
// 状态列表
$statuses = [
Adverse::STATUS_PENDING,
Adverse::STATUS_PROCESSING,
Adverse::STATUS_SOLVED,
Adverse::STATUS_CLOSED
];
// 事件描述模板
$descriptions = [
'患者反映护工服务态度不佳,存在沟通问题',
'护工未按时到达,影响患者正常护理',
'患者家属投诉护工专业技能不足',
'护工在护理过程中出现操作失误',
'患者反映护工个人卫生问题',
'护工与患者家属发生言语冲突',
'护工未按照医嘱执行护理操作',
'患者反映护工工作态度消极',
'护工在护理过程中造成患者轻微受伤',
'患者家属对护工服务不满意',
'护工未及时报告患者异常情况',
'护工在护理过程中使用手机影响工作',
'患者反映护工专业知识欠缺',
'护工未按规定时间进行护理记录',
'患者家属投诉护工服务态度恶劣'
];
// 解决结果模板
$solvedResults = [
'已对护工进行批评教育,要求改进服务态度',
'已安排经验丰富的护工接替,确保服务质量',
'已对护工进行专业技能培训,提升护理水平',
'已对护工进行安全教育,避免类似事件发生',
'已要求护工严格遵守个人卫生规范',
'已对护工进行沟通技巧培训,改善服务态度',
'已对护工进行规范化操作培训',
'已对护工进行职业道德教育',
'已对护工进行安全操作培训,确保患者安全',
'已安排护工与患者家属沟通,化解矛盾',
'已建立护工定期报告制度,及时发现问题',
'已制定护工工作纪律,禁止工作时间使用手机',
'已对护工进行专业知识培训',
'已建立护理记录检查制度,确保及时记录',
'已对护工进行服务态度培训,提升服务质量'
];
// 经办人列表
$handlers = [
'张主任',
'李护士长',
'王管理员',
'刘主管',
'陈经理'
];
// 创建50条测试数据
for ($i = 1; $i <= 50; $i++) {
$project = $projects->random();
$order = Orders::where('project_id', $project->id)->inRandomOrder()->first();
$type = $types[array_rand($types)];
$status = $statuses[array_rand($statuses)];
$description = $descriptions[array_rand($descriptions)];
$data = [
'project_id' => $project->id,
'order_id' => $order ? $order->id : null,
'type' => $type,
'description' => $description,
'solved_status' => $status,
'solved_by' => $handlers[array_rand($handlers)],
'created_at' => Carbon::now()->subDays(rand(1, 90)),
'updated_at' => Carbon::now()->subDays(rand(1, 90))
];
// 如果已解决,设置解决时间和结果
if (in_array($status, [Adverse::STATUS_SOLVED, Adverse::STATUS_CLOSED])) {
$data['solved_at'] = Carbon::now()->subDays(rand(1, 30));
$data['solved_result'] = $solvedResults[array_rand($solvedResults)];
}
Adverse::create($data);
}
$this->command->info('成功创建50条不良事件测试数据');
}
}