一次大的提交

This commit is contained in:
2026-08-07 08:49:29 +08:00
parent bf2fc49c19
commit db70665ced
181 changed files with 23060 additions and 2804 deletions

View File

@@ -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);
}

View File

@@ -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'));
}
}
}