|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+import uuid
|
|
|
2
|
+from datetime import datetime
|
|
|
3
|
+from typing import List, Optional
|
|
|
4
|
+from ..models.patrol_issue import PatrolIssue, IssueStatus, IssueType, IssueLevel
|
|
|
5
|
+from ..models.work_order import WorkOrder, WorkOrderPriority
|
|
|
6
|
+
|
|
|
7
|
+
|
|
|
8
|
+class IssueService:
|
|
|
9
|
+ def __init__(self):
|
|
|
10
|
+ self.issues = {}
|
|
|
11
|
+ self.work_orders = {}
|
|
|
12
|
+
|
|
|
13
|
+ def create_issue(self, issue_data: dict) -> PatrolIssue:
|
|
|
14
|
+ """创建巡检问题"""
|
|
|
15
|
+ issue = PatrolIssue(
|
|
|
16
|
+ issue_type=IssueType(issue_data["issue_type"]),
|
|
|
17
|
+ level=IssueLevel(issue_data["level"]),
|
|
|
18
|
+ location=issue_data["location"],
|
|
|
19
|
+ description=issue_data["description"],
|
|
|
20
|
+ reporter_id=issue_data["reporter_id"],
|
|
|
21
|
+ patrol_id=issue_data["patrol_id"]
|
|
|
22
|
+ )
|
|
|
23
|
+
|
|
|
24
|
+ issue.id = len(self.issues) + 1
|
|
|
25
|
+ self.issues[issue.id] = issue
|
|
|
26
|
+
|
|
|
27
|
+ # 自动创建工单
|
|
|
28
|
+ work_order = self._create_work_order(issue)
|
|
|
29
|
+
|
|
|
30
|
+ return issue
|
|
|
31
|
+
|
|
|
32
|
+ def get_issue(self, issue_id: int) -> Optional[PatrolIssue]:
|
|
|
33
|
+ """获取问题详情"""
|
|
|
34
|
+ return self.issues.get(issue_id)
|
|
|
35
|
+
|
|
|
36
|
+ def get_issues_by_patrol(self, patrol_id: int) -> List[PatrolIssue]:
|
|
|
37
|
+ """根据巡检ID获取问题列表"""
|
|
|
38
|
+ return [issue for issue in self.issues.values() if issue.patrol_id == patrol_id]
|
|
|
39
|
+
|
|
|
40
|
+ def update_issue_status(self, issue_id: int, status: IssueStatus) -> bool:
|
|
|
41
|
+ """更新问题状态"""
|
|
|
42
|
+ if issue_id in self.issues:
|
|
|
43
|
+ self.issues[issue_id].status = status
|
|
|
44
|
+ self.issues[issue_id].updated_at = datetime.now()
|
|
|
45
|
+ return True
|
|
|
46
|
+ return False
|
|
|
47
|
+
|
|
|
48
|
+ def get_issues_by_type_and_status(self, issue_type: IssueType, status: IssueStatus) -> List[PatrolIssue]:
|
|
|
49
|
+ """根据类型和状态筛选问题"""
|
|
|
50
|
+ return [issue for issue in self.issues.values()
|
|
|
51
|
+ if issue.issue_type == issue_type and issue.status == status]
|
|
|
52
|
+
|
|
|
53
|
+ def _create_work_order(self, issue: PatrolIssue) -> WorkOrder:
|
|
|
54
|
+ """根据问题自动创建工单"""
|
|
|
55
|
+ priority_map = {
|
|
|
56
|
+ IssueLevel.LOW: WorkOrderPriority.LOW,
|
|
|
57
|
+ IssueLevel.MEDIUM: WorkOrderPriority.MEDIUM,
|
|
|
58
|
+ IssueLevel.HIGH: WorkOrderPriority.HIGH,
|
|
|
59
|
+ IssueLevel.URGENT: WorkOrderPriority.URGENT
|
|
|
60
|
+ }
|
|
|
61
|
+
|
|
|
62
|
+ work_order = WorkOrder(
|
|
|
63
|
+ title=f"巡检问题处理: {issue.location}",
|
|
|
64
|
+ description=f"巡检中发现{issue.issue_type.value}问题,{issue.description}",
|
|
|
65
|
+ issue_id=issue.id,
|
|
|
66
|
+ priority=priority_map[issue.level]
|
|
|
67
|
+ )
|
|
|
68
|
+
|
|
|
69
|
+ work_order.id = len(self.work_orders) + 1
|
|
|
70
|
+ self.work_orders[work_order.id] = work_order
|
|
|
71
|
+
|
|
|
72
|
+ return work_order
|
|
|
73
|
+
|
|
|
74
|
+ def get_work_order_by_issue(self, issue_id: int) -> Optional[WorkOrder]:
|
|
|
75
|
+ """根据问题ID获取关联工单"""
|
|
|
76
|
+ for work_order in self.work_orders.values():
|
|
|
77
|
+ if work_order.issue_id == issue_id:
|
|
|
78
|
+ return work_order
|
|
|
79
|
+ return None
|