一次大的提交
This commit is contained in:
@@ -1,12 +1,35 @@
|
||||
import '../models/workorder_model.dart';
|
||||
|
||||
/// 工单远程数据源抽象类
|
||||
abstract class WorkOrderRemoteDataSource {
|
||||
/// 获取工单列表
|
||||
Future<List<WorkOrderModel>> getWorkOrderList({
|
||||
String? status,
|
||||
required int page,
|
||||
required int pageSize,
|
||||
int? siteId,
|
||||
int? orgId,
|
||||
});
|
||||
|
||||
/// 获取工单统计
|
||||
Future<WorkOrderCountModel> getWorkOrderCount();
|
||||
|
||||
Future<WorkOrderModel> getWorkOrderDetail(
|
||||
String orderId, {
|
||||
int? siteId,
|
||||
int? orgId,
|
||||
});
|
||||
|
||||
Future<List<Map<String, dynamic>>> fetchUsers({
|
||||
required int orgId,
|
||||
required int siteId,
|
||||
});
|
||||
|
||||
Future<void> dispatchWorkOrder({
|
||||
required String orderId,
|
||||
required String assigneeId,
|
||||
required String assigneeName,
|
||||
String? dispatchRemark,
|
||||
String? collaboratorIds,
|
||||
String? collaboratorNames,
|
||||
String? planStartTime,
|
||||
String? planEndTime,
|
||||
String? deadlineTime,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,87 +1,145 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import '../../../../../core/consts/http_api_consts.dart';
|
||||
import '../../../../../core/consts/workorder_consts.dart';
|
||||
import 'workorder_remote_datasource.dart';
|
||||
import '../models/workorder_model.dart';
|
||||
|
||||
/// 工单远程数据源实现(模拟数据)
|
||||
class WorkOrderRemoteDataSourceImpl implements WorkOrderRemoteDataSource {
|
||||
WorkOrderRemoteDataSourceImpl(this._dio);
|
||||
|
||||
final Dio _dio;
|
||||
|
||||
@override
|
||||
Future<List<WorkOrderModel>> getWorkOrderList({String? status}) async {
|
||||
// 模拟网络延迟
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
Future<List<WorkOrderModel>> getWorkOrderList({
|
||||
required int page,
|
||||
required int pageSize,
|
||||
int? siteId,
|
||||
int? orgId,
|
||||
}) async {
|
||||
final queryParameters = {'page': page, 'pageSize': pageSize};
|
||||
if (siteId != null) {
|
||||
queryParameters['siteId'] = siteId;
|
||||
}
|
||||
if (orgId != null) {
|
||||
queryParameters['orgId'] = orgId;
|
||||
}
|
||||
final response = await _dio.get(
|
||||
HttpApiConsts.workOrderList,
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
|
||||
// 模拟数据
|
||||
final allOrders = [
|
||||
WorkOrderModel(
|
||||
id: '1',
|
||||
title: '逆变器通讯故障处理',
|
||||
orderNo: 'WO-20250521001',
|
||||
priority: WorkOrderPriority.high,
|
||||
executor: null,
|
||||
createTime: DateTime(2025, 5, 21, 10, 12),
|
||||
completeTime: null,
|
||||
location: 'A区 / INV-001',
|
||||
status: WorkOrderStatus.pending,
|
||||
progress: null,
|
||||
),
|
||||
WorkOrderModel(
|
||||
id: '2',
|
||||
title: '组件清洗作业',
|
||||
orderNo: 'WO-20250521002',
|
||||
priority: WorkOrderPriority.medium,
|
||||
executor: '张工',
|
||||
createTime: DateTime(2025, 5, 21, 9, 30),
|
||||
completeTime: null,
|
||||
location: 'B区',
|
||||
status: WorkOrderStatus.executing,
|
||||
progress: 60.0,
|
||||
),
|
||||
WorkOrderModel(
|
||||
id: '3',
|
||||
title: '汇流箱巡检',
|
||||
orderNo: 'WO-20250520098',
|
||||
priority: WorkOrderPriority.low,
|
||||
executor: '李工',
|
||||
createTime: DateTime(2025, 5, 20, 14, 20),
|
||||
completeTime: DateTime(2025, 5, 20, 16, 32),
|
||||
location: 'C区',
|
||||
status: WorkOrderStatus.completed,
|
||||
progress: 100.0,
|
||||
),
|
||||
];
|
||||
|
||||
// 根据状态筛选
|
||||
if (status != null && status != 'all') {
|
||||
return allOrders
|
||||
.where((order) => _statusToString(order.status) == status)
|
||||
.toList();
|
||||
final responseData = response.data;
|
||||
final int code = responseData['code'] ?? -1;
|
||||
if (code != 0 && code != 200) {
|
||||
throw Exception('获取工单列表失败: code=$code');
|
||||
}
|
||||
|
||||
return allOrders;
|
||||
final List<dynamic> rows = responseData['rows'] ?? [];
|
||||
return rows
|
||||
.map((item) => WorkOrderModel.fromJson(item as Map<String, dynamic>))
|
||||
.toList();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<WorkOrderCountModel> getWorkOrderCount() async {
|
||||
// 模拟网络延迟
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
|
||||
// 模拟统计数据
|
||||
return WorkOrderCountModel(
|
||||
pendingCount: 12,
|
||||
executingCount: 8,
|
||||
todayCompletedCount: 18,
|
||||
final response = await _dio.get(HttpApiConsts.workOrderCount);
|
||||
final responseData = response.data;
|
||||
final int code = responseData['code'] ?? -1;
|
||||
if (code != 0 && code != 200) {
|
||||
throw Exception('获取工单统计失败: code=$code');
|
||||
}
|
||||
return WorkOrderCountModel.fromJson(
|
||||
responseData['data'] as Map<String, dynamic>,
|
||||
);
|
||||
}
|
||||
|
||||
String _statusToString(WorkOrderStatus status) {
|
||||
switch (status) {
|
||||
case WorkOrderStatus.pending:
|
||||
return 'pending';
|
||||
case WorkOrderStatus.executing:
|
||||
return 'executing';
|
||||
case WorkOrderStatus.completed:
|
||||
return 'completed';
|
||||
case WorkOrderStatus.all:
|
||||
return 'all';
|
||||
@override
|
||||
Future<WorkOrderModel> getWorkOrderDetail(
|
||||
String orderId, {
|
||||
int? siteId,
|
||||
int? orgId,
|
||||
}) async {
|
||||
final queryParameters = <String, dynamic>{};
|
||||
if (siteId != null) {
|
||||
queryParameters['siteId'] = siteId;
|
||||
}
|
||||
if (orgId != null) {
|
||||
queryParameters['orgId'] = orgId;
|
||||
}
|
||||
final response = await _dio.get(
|
||||
'${HttpApiConsts.workOrderDetail}/$orderId',
|
||||
queryParameters: queryParameters,
|
||||
);
|
||||
|
||||
final responseData = response.data;
|
||||
final int code = responseData['code'] ?? -1;
|
||||
if (code != 0 && code != 200) {
|
||||
throw Exception('获取工单详情失败: code=$code');
|
||||
}
|
||||
|
||||
final data = responseData['data'];
|
||||
if (data == null) {
|
||||
throw Exception('工单详情数据为空');
|
||||
}
|
||||
|
||||
return WorkOrderModel.fromJson(data as Map<String, dynamic>);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<Map<String, dynamic>>> fetchUsers({
|
||||
required int orgId,
|
||||
required int siteId,
|
||||
}) async {
|
||||
final response = await _dio.get(
|
||||
HttpApiConsts.systemUserList,
|
||||
queryParameters: {
|
||||
'pageNum': 1,
|
||||
'pageSize': 99999,
|
||||
'orgId': orgId,
|
||||
'siteId': siteId,
|
||||
},
|
||||
);
|
||||
|
||||
final responseData = response.data;
|
||||
final int code = responseData['code'] ?? -1;
|
||||
if (code != 0 && code != 200) {
|
||||
throw Exception('获取人员列表失败: code=$code');
|
||||
}
|
||||
|
||||
final List<dynamic> rows =
|
||||
responseData['rows'] ?? responseData['data'] ?? [];
|
||||
return rows.cast<Map<String, dynamic>>();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> dispatchWorkOrder({
|
||||
required String orderId,
|
||||
required String assigneeId,
|
||||
required String assigneeName,
|
||||
String? dispatchRemark,
|
||||
String? collaboratorIds,
|
||||
String? collaboratorNames,
|
||||
String? planStartTime,
|
||||
String? planEndTime,
|
||||
String? deadlineTime,
|
||||
}) async {
|
||||
final data = <String, dynamic>{
|
||||
'orderId': orderId,
|
||||
'assigneeId': assigneeId,
|
||||
'assigneeName': assigneeName,
|
||||
'collaboratorIds': collaboratorIds ?? '',
|
||||
'collaboratorNames': collaboratorNames ?? '',
|
||||
'planStartTime': planStartTime ?? '',
|
||||
'planEndTime': planEndTime ?? '',
|
||||
'deadlineTime': deadlineTime ?? '',
|
||||
};
|
||||
|
||||
final response = await _dio.post(HttpApiConsts.workOrderDispat, data: data);
|
||||
|
||||
final responseData = response.data;
|
||||
final int code = responseData['code'] ?? -1;
|
||||
if (code != 0 && code != 200) {
|
||||
throw Exception('转派工单失败: ${responseData['msg'] ?? '未知错误'}');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user