156 lines
3.7 KiB
Dart
156 lines
3.7 KiB
Dart
import 'package:maibu_satabot_v2/features/v2/waring_center/domain/entities/alarm_entity.dart';
|
|
import 'package:maibu_satabot_v2/features/v2/waring_center/domain/entities/alarm_count_entity.dart';
|
|
import 'package:maibu_satabot_v2/features/v2/waring_center/presentation/constants/alarm_constants.dart';
|
|
|
|
/// 告警数据模型
|
|
class AlarmModel {
|
|
AlarmModel({
|
|
required this.id,
|
|
required this.title,
|
|
required this.area,
|
|
required this.device,
|
|
required this.time,
|
|
required this.level,
|
|
required this.status,
|
|
this.aiDiagnosis,
|
|
});
|
|
|
|
final String id;
|
|
final String title;
|
|
final String area;
|
|
final String device;
|
|
final String time;
|
|
final AlarmLevel level;
|
|
final AlarmStatus status;
|
|
final String? aiDiagnosis;
|
|
|
|
/// 从 JSON 创建
|
|
factory AlarmModel.fromJson(Map<String, dynamic> json) {
|
|
return AlarmModel(
|
|
id: json['id'] as String,
|
|
title: json['title'] as String,
|
|
area: json['area'] as String,
|
|
device: json['device'] as String,
|
|
time: json['time'] as String,
|
|
level: _parseLevel(json['level'] as String),
|
|
status: _parseStatus(json['status'] as String),
|
|
aiDiagnosis: json['aiDiagnosis'] as String?,
|
|
);
|
|
}
|
|
|
|
/// 转换为 JSON
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'title': title,
|
|
'area': area,
|
|
'device': device,
|
|
'time': time,
|
|
'level': level.name,
|
|
'status': status.name,
|
|
'aiDiagnosis': aiDiagnosis,
|
|
};
|
|
}
|
|
|
|
/// 转换为实体
|
|
AlarmEntity toEntity() {
|
|
return AlarmEntity(
|
|
id: id,
|
|
title: title,
|
|
area: area,
|
|
device: device,
|
|
time: time,
|
|
level: level,
|
|
status: status,
|
|
aiDiagnosis: aiDiagnosis,
|
|
);
|
|
}
|
|
|
|
/// 从实体创建
|
|
factory AlarmModel.fromEntity(AlarmEntity entity) {
|
|
return AlarmModel(
|
|
id: entity.id,
|
|
title: entity.title,
|
|
area: entity.area,
|
|
device: entity.device,
|
|
time: entity.time,
|
|
level: entity.level,
|
|
status: entity.status,
|
|
aiDiagnosis: entity.aiDiagnosis,
|
|
);
|
|
}
|
|
|
|
static AlarmLevel _parseLevel(String level) {
|
|
switch (level) {
|
|
case 'danger':
|
|
return AlarmLevel.danger;
|
|
case 'warning':
|
|
return AlarmLevel.warning;
|
|
case 'low':
|
|
return AlarmLevel.low;
|
|
case 'info':
|
|
return AlarmLevel.info;
|
|
default:
|
|
return AlarmLevel.info;
|
|
}
|
|
}
|
|
|
|
static AlarmStatus _parseStatus(String status) {
|
|
switch (status) {
|
|
case 'unconfirmed':
|
|
return AlarmStatus.unconfirmed;
|
|
case 'confirmed':
|
|
return AlarmStatus.confirmed;
|
|
case 'recovered':
|
|
return AlarmStatus.recovered;
|
|
default:
|
|
return AlarmStatus.unconfirmed;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// 告警统计数据模型
|
|
class AlarmCountModel {
|
|
AlarmCountModel({
|
|
required this.unprocessed,
|
|
required this.processing,
|
|
required this.confirmed,
|
|
required this.todayNew,
|
|
});
|
|
|
|
final int unprocessed;
|
|
final int processing;
|
|
final int confirmed;
|
|
final int todayNew;
|
|
|
|
/// 从 JSON 创建
|
|
factory AlarmCountModel.fromJson(Map<String, dynamic> json) {
|
|
return AlarmCountModel(
|
|
unprocessed: json['unprocessed'] as int,
|
|
processing: json['processing'] as int,
|
|
confirmed: json['confirmed'] as int,
|
|
todayNew: json['todayNew'] as int,
|
|
);
|
|
}
|
|
|
|
/// 转换为 JSON
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'unprocessed': unprocessed,
|
|
'processing': processing,
|
|
'confirmed': confirmed,
|
|
'todayNew': todayNew,
|
|
};
|
|
}
|
|
|
|
/// 转换为实体
|
|
AlarmCountEntity toEntity() {
|
|
return AlarmCountEntity(
|
|
unprocessed: unprocessed,
|
|
processing: processing,
|
|
confirmed: confirmed,
|
|
todayNew: todayNew,
|
|
);
|
|
}
|
|
}
|