本文目录导读:

我来为您详细介绍PHP项目工单的升级与闭环流程,这是一个完整的工单管理系统核心功能。
工单升级机制
自动升级触发条件
<?php
namespace App\Services\WorkOrder;
class WorkOrderEscalation
{
const URGENCY_LEVELS = [
'low' => 1,
'medium' => 2,
'high' => 3,
'critical' => 4
];
// 自动升级规则
private $escalationRules = [
'low' => [
'timeout_hours' => 72,
'escalate_to' => 'team_lead'
],
'medium' => [
'timeout_hours' => 48,
'escalate_to' => 'department_head'
],
'high' => [
'timeout_hours' => 24,
'escalate_to' => 'manager'
],
'critical' => [
'timeout_hours' => 4,
'escalate_to' => 'director'
]
];
public function checkAutoEscalation($workOrder)
{
$hoursElapsed = $this->calculateElapsedHours($workOrder->created_at);
$urgency = $workOrder->urgency;
if ($hoursElapsed >= $this->escalationRules[$urgency]['timeout_hours']) {
return $this->triggerEscalation($workOrder);
}
return false;
}
}
手动升级处理
<?php
namespace App\Models;
class WorkOrder extends Model
{
public function escalate($reason, $targetLevel)
{
DB::transaction(function() use ($reason, $targetLevel) {
// 记录升级历史
$this->escalationHistories()->create([
'from_level' => $this->priority_level,
'to_level' => $targetLevel,
'reason' => $reason,
'escalated_by' => auth()->id(),
'previous_assignee' => $this->assignee_id
]);
// 更新工单优先级
$this->update([
'priority_level' => $targetLevel,
'escalated_at' => now()
]);
// 重新分配处理人
$this->reassignToHigherLevel();
});
}
}
工单闭环流程
闭环状态机设计
<?php
namespace App\Models\Enums;
class WorkOrderStatus
{
const CREATED = 'created';
const ASSIGNED = 'assigned';
const IN_PROGRESS = 'in_progress';
const PENDING_REVIEW = 'pending_review';
const RESOLVED = 'resolved';
const CLOSED = 'closed';
const REOPENED = 'reopened';
// 状态转换规则
const TRANSITIONS = [
'created' => ['assigned', 'cancelled'],
'assigned' => ['in_progress', 'pending_review', 'cancelled'],
'in_progress' => ['pending_review', 'paused'],
'pending_review' => ['resolved', 'in_progress'],
'resolved' => ['closed', 'reopened'],
'closed' => ['reopened'],
'reopened' => ['assigned', 'in_progress']
];
}
闭环验证接口
<?php
namespace App\Services\WorkOrder;
class ClosureValidator
{
public function validateClosure(WorkOrder $workOrder, ClosureRequest $request)
{
$errors = [];
// 必须填写解决方案
if (empty($request->resolution)) {
$errors[] = '请填写解决方案描述';
}
// 必须确认所有子任务完成
if ($workOrder->subTasks()->where('status', '!=', 'completed')->exists()) {
$errors[] = '存在未完成的子任务';
}
// 检查关联的资源是否已释放
if ($workOrder->resources()->where('is_locked', true)->exists()) {
$errors[] = '关联资源未释放';
}
// 客户确认(如果适用)
if ($workOrder->needs_customer_approval && !$request->customer_confirmed) {
$errors[] = '需要客户确认';
}
if (empty($errors)) {
return ['is_valid' => true];
}
return ['is_valid' => false, 'errors' => $errors];
}
}
闭环执行流程
<?php
namespace App\Http\Controllers\Api;
class WorkOrderController extends Controller
{
public function close(WorkOrder $workOrder, CloseRequest $request)
{
// 1. 验证闭环条件
$validator = app(ClosureValidator::class);
$validation = $validator->validateClosure($workOrder, $request);
if (!$validation['is_valid']) {
return response()->json([
'success' => false,
'message' => '闭环验证失败',
'errors' => $validation['errors']
], 422);
}
// 2. 执行闭环
DB::transaction(function() use ($workOrder, $request) {
// 记录闭环信息
$workOrder->closure()->create([
'resolution' => $request->resolution,
'closure_type' => $request->closure_type,
'closed_by' => auth()->id(),
'closed_at' => now(),
'resolution_time' => $workOrder->created_at->diffInHours(now())
]);
// 更新工单状态
$workOrder->update(['status' => WorkOrderStatus::CLOSED]);
// 发送通知
$this->notifyStakeholders($workOrder);
// 触发后续流程
event(new WorkOrderClosed($workOrder));
});
// 3. 生成闭环报告
$report = $this->generateClosureReport($workOrder);
return response()->json([
'success' => true,
'message' => '工单已成功闭环',
'data' => [
'work_order' => $workOrder->fresh(),
'report' => $report
]
]);
}
private function generateClosureReport($workOrder)
{
return [
'work_order_id' => $workOrder->id,
'title' => $workOrder->title,
'total_duration' => $workOrder->created_at->diffInHours($workOrder->closed_at),
'actual_work_hours' => $workOrder->timeTrackings()->sum('hours'),
'resolution_summary' => $workOrder->closure->resolution,
'satisfaction_score' => $workOrder->feedback?->score,
'cost_analysis' => [
'labor_cost' => $this->calculateLaborCost($workOrder),
'material_cost' => $workOrder->materialCosts()->sum('amount')
]
];
}
}
升级与闭环关联功能
升级后自动闭环监控
<?php
namespace App\Console\Commands;
class MonitorEscalatedWorkOrders extends Command
{
public function handle()
{
// 监控已升级但未闭环的工单
$escalatedOrders = WorkOrder::where('escalated_at', '!=', null)
->where('status', '!=', WorkOrderStatus::CLOSED)
->get();
foreach ($escalatedOrders as $order) {
// 检查是否需要二次升级
if ($this->needsSecondEscalation($order)) {
$order->escalate('自动二次升级', URGENCY_LEVELS['critical']);
}
// 检查是否超时未处理
if ($this->hasExceededDeadline($order)) {
$this->triggerAudit($order);
}
}
}
}
闭环统计与分析
<?php
namespace App\Services\Analytics;
class ClosureAnalytics
{
public function getEscalationClosureReport($startDate, $endDate)
{
return WorkOrder::whereBetween('closed_at', [$startDate, $endDate])
->where('escalated_at', '!=', null)
->select(
DB::raw('COUNT(*) as total_closed'),
DB::raw('AVG(TIMESTAMPDIFF(HOUR, escalated_at, closed_at)) as avg_closure_time'),
DB::raw('COUNT(CASE WHEN closure_type = "success" THEN 1 END) as successful_closures'),
DB::raw('COUNT(CASE WHEN closure_type = "partial" THEN 1 END) as partial_closures')
)
->first();
}
}
前端交互示例
// React组件示例
class WorkOrderClosure extends React.Component {
handleCloseWorkOrder = async () => {
const validationErrors = await this.validateClosure();
if (validationErrors.length > 0) {
this.showErrors(validationErrors);
return;
}
// 显示确认对话框
const confirmed = await this.showConfirmationDialog({
title: '确认闭环',
message: '工单闭环后将无法修改,是否继续?',
confirmText: '确认闭环',
cancelText: '取消'
});
if (confirmed) {
try {
await api.closeWorkOrder(this.props.workOrderId, {
resolution: this.state.resolution,
closure_type: this.state.closureType
});
notification.success('工单已成功闭环');
this.redirectToWorkOrderList();
} catch (error) {
notification.error('闭环失败: ' + error.message);
}
}
}
}
最佳实践建议
- 升级规则配置化:将升级规则存储在数据库或配置文件中,便于动态调整
- 闭环数据完整性:确保所有必填字段和附件完整
- 审计日志:记录所有升级和闭环操作
- 自动化提醒:工单接近升级时间时自动提醒
- 闭环后分析:定期分析升级原因和闭环效率
这个完整的工单升级与闭环系统可以帮助您的PHP项目有效管理工单生命周期,提高问题解决效率和服务质量。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播