一次大的提交
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
import 'package:fpdart/fpdart.dart';
|
||||
import 'package:maibu_satabot_v2/core/error/failure.dart';
|
||||
import 'package:maibu_satabot_v2/features/v2/work_order/data/models/work_order_model.dart';
|
||||
|
||||
abstract class WorkOrderRemoteDataSource {
|
||||
Future<Either<Failure, List<WorkOrderModel>>> getWorkOrderList(
|
||||
Map<String, dynamic> params,
|
||||
);
|
||||
|
||||
Future<Either<Failure, WorkOrderModel>> getWorkOrderDetail(int id);
|
||||
|
||||
Future<Either<Failure, bool>> dispatchWorkOrder(Map<String, dynamic> params);
|
||||
|
||||
Future<Either<Failure, bool>> suspendWorkOrder(int id);
|
||||
|
||||
Future<Either<Failure, bool>> completeWorkOrder(Map<String, dynamic> params);
|
||||
|
||||
Future<Either<Failure, bool>> startWorkOrder(Map<String, dynamic> params);
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:http_parser/http_parser.dart';
|
||||
import 'package:fpdart/fpdart.dart';
|
||||
import 'package:maibu_satabot_v2/core/consts/http_api_consts.dart';
|
||||
import 'package:maibu_satabot_v2/core/error/failure.dart';
|
||||
import 'package:maibu_satabot_v2/features/v2/work_order/data/models/work_order_model.dart';
|
||||
import 'package:maibu_satabot_v2/features/v2/work_order/data/datasources/work_order_remote_datasource.dart';
|
||||
|
||||
class WorkOrderRemoteDataSourceImpl implements WorkOrderRemoteDataSource {
|
||||
WorkOrderRemoteDataSourceImpl(this._dio);
|
||||
|
||||
final Dio _dio;
|
||||
|
||||
@override
|
||||
Future<Either<Failure, List<WorkOrderModel>>> getWorkOrderList(
|
||||
Map<String, dynamic> params,
|
||||
) async {
|
||||
try {
|
||||
final response = await _dio.get(
|
||||
HttpApiConsts.workOrderList,
|
||||
queryParameters: params,
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = response.data as Map<String, dynamic>;
|
||||
final code = data['code'];
|
||||
if (code != null && code.toString() == '200') {
|
||||
final rows = data['rows'] as List<dynamic>? ?? [];
|
||||
final list = rows
|
||||
.map(
|
||||
(item) => WorkOrderModel.fromJson(item as Map<String, dynamic>),
|
||||
)
|
||||
.toList();
|
||||
list.sort((a, b) {
|
||||
final timeA = a.planStartTime ?? '';
|
||||
final timeB = b.planStartTime ?? '';
|
||||
return timeA.compareTo(timeB);
|
||||
});
|
||||
return right(list);
|
||||
} else {
|
||||
return left(Failure(data['msg'] ?? '获取工单列表失败'));
|
||||
}
|
||||
} else {
|
||||
return left(Failure('HTTP错误: ${response.statusCode}'));
|
||||
}
|
||||
} catch (e) {
|
||||
return left(Failure('获取工单列表异常: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Either<Failure, WorkOrderModel>> getWorkOrderDetail(int id) async {
|
||||
try {
|
||||
final response = await _dio.get('${HttpApiConsts.workOrderDetail}/$id');
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = response.data as Map<String, dynamic>;
|
||||
final code = data['code'];
|
||||
if (code != null && code.toString() == '200') {
|
||||
final result = data['result'] as Map<String, dynamic>? ?? {};
|
||||
return right(WorkOrderModel.fromJson(result));
|
||||
} else {
|
||||
return left(Failure(data['msg'] ?? '获取工单详情失败'));
|
||||
}
|
||||
} else {
|
||||
return left(Failure('HTTP错误: ${response.statusCode}'));
|
||||
}
|
||||
} catch (e) {
|
||||
return left(Failure('获取工单详情异常: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Either<Failure, bool>> dispatchWorkOrder(
|
||||
Map<String, dynamic> params,
|
||||
) async {
|
||||
try {
|
||||
final response = await _dio.put(
|
||||
HttpApiConsts.workOrderDispat,
|
||||
data: params,
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = response.data as Map<String, dynamic>;
|
||||
final code = data['code'];
|
||||
if (code != null && code.toString() == '200') {
|
||||
return right(true);
|
||||
} else {
|
||||
return left(Failure(data['msg'] ?? '派发工单失败'));
|
||||
}
|
||||
} else {
|
||||
return left(Failure('HTTP错误: ${response.statusCode}'));
|
||||
}
|
||||
} catch (e) {
|
||||
return left(Failure('派发工单异常: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Either<Failure, bool>> suspendWorkOrder(int id) async {
|
||||
try {
|
||||
final response = await _dio.post('${HttpApiConsts.workOrderSuspend}/$id');
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = response.data as Map<String, dynamic>;
|
||||
final code = data['code'];
|
||||
if (code != null && code.toString() == '200') {
|
||||
return right(true);
|
||||
} else {
|
||||
return left(Failure(data['msg'] ?? '挂起工单失败'));
|
||||
}
|
||||
} else {
|
||||
return left(Failure('HTTP错误: ${response.statusCode}'));
|
||||
}
|
||||
} catch (e) {
|
||||
return left(Failure('挂起工单异常: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Either<Failure, bool>> completeWorkOrder(
|
||||
Map<String, dynamic> params,
|
||||
) async {
|
||||
try {
|
||||
final formData = FormData.fromMap({
|
||||
'workOrder': MultipartFile.fromString(
|
||||
jsonEncode(params),
|
||||
contentType: MediaType.parse('application/json'),
|
||||
),
|
||||
});
|
||||
final response = await _dio.post(
|
||||
HttpApiConsts.workOrderComplete,
|
||||
data: formData,
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = response.data as Map<String, dynamic>;
|
||||
final code = data['code'];
|
||||
if (code != null && code.toString() == '200') {
|
||||
return right(true);
|
||||
} else {
|
||||
return left(Failure(data['msg'] ?? '完成工单失败'));
|
||||
}
|
||||
} else {
|
||||
return left(Failure('HTTP错误: ${response.statusCode}'));
|
||||
}
|
||||
} catch (e) {
|
||||
return left(Failure('完成工单异常: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Either<Failure, bool>> startWorkOrder(
|
||||
Map<String, dynamic> params,
|
||||
) async {
|
||||
try {
|
||||
final response = await _dio.post(
|
||||
HttpApiConsts.workOrderStart,
|
||||
data: params,
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = response.data as Map<String, dynamic>;
|
||||
final code = data['code'];
|
||||
if (code != null && code.toString() == '200') {
|
||||
return right(true);
|
||||
} else {
|
||||
return left(Failure(data['msg'] ?? '开始执行工单失败'));
|
||||
}
|
||||
} else {
|
||||
return left(Failure('HTTP错误: ${response.statusCode}'));
|
||||
}
|
||||
} catch (e) {
|
||||
return left(Failure('开始执行工单异常: $e'));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user