|
|
@@ -1,6 +1,8 @@
|
|
|
import 'package:chicken_farm/core/api/api_option.dart';
|
|
|
import 'package:chicken_farm/core/api/api_service.dart';
|
|
|
import 'package:chicken_farm/core/config/app_config.dart';
|
|
|
+import 'package:chicken_farm/core/config/breed_config.dart';
|
|
|
+import 'package:chicken_farm/core/db/table_config.dart';
|
|
|
import 'package:chicken_farm/core/services/breeding_data_service.dart';
|
|
|
import 'package:chicken_farm/modes/api/result_model.dart';
|
|
|
|
|
|
@@ -10,142 +12,178 @@ class BreedSubmitApi {
|
|
|
factory BreedSubmitApi() => _instance;
|
|
|
|
|
|
BreedSubmitApi._internal();
|
|
|
+ final BreedingDataService _breedingDataService = BreedingDataService();
|
|
|
+
|
|
|
+ final String bindChickenUrl = '/app/breeding/bind/';
|
|
|
+ final String cageChangeUrl = '/app/breeding/cageChange/';
|
|
|
+ final String weightUrl = '/app/breeding/weight/';
|
|
|
+ final String cullUrl = '/app/breeding/cull/';
|
|
|
|
|
|
Future<ResultModel> bindChicken(dynamic data) async {
|
|
|
try {
|
|
|
- if (AppConfig.isOffline) {
|
|
|
- return await bindChickenOffline(data);
|
|
|
- } else {
|
|
|
- return await ApiService().postWithOfflineSupport(
|
|
|
- '/app/breeding/create/',
|
|
|
- data: data,
|
|
|
+ List<String> ids = data['rfids'];
|
|
|
+ // 保存到本地数据库
|
|
|
+ List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
|
|
|
+ return {
|
|
|
+ 'rfid': id,
|
|
|
+ 'batch_num': data['batchNum'],
|
|
|
+ 'family_id': data['familyId'],
|
|
|
+ 'date': data['date'],
|
|
|
+ 'is_export': 0,
|
|
|
+ };
|
|
|
+ }).toList();
|
|
|
+ ResultModel result = ResultModel.offline();
|
|
|
+ if (!AppConfig.isOffline) {
|
|
|
+ result = await ApiService().post(
|
|
|
+ bindChickenUrl,
|
|
|
+ data: list,
|
|
|
apiOption: ApiOption.noAlert(),
|
|
|
);
|
|
|
}
|
|
|
+ if (result.isOffline == true || result.isNetError == true) {
|
|
|
+ return await _breedingDataService.batchInsert(
|
|
|
+ TableConfig.chicken,
|
|
|
+ list,
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
return ResultModel(success: false, message: e.toString(), data: null);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- Future<ResultModel> bindChickenOffline(dynamic data) async {
|
|
|
- // 保存到本地数据库
|
|
|
- List<Map<String, dynamic>> list = data.map<Map<String, dynamic>>((item) {
|
|
|
- return {
|
|
|
- 'rfid': item['rfid'],
|
|
|
- 'batch_num': item['batchNum'],
|
|
|
- 'family_id': item['familyId'],
|
|
|
- 'date': item['date'],
|
|
|
- 'is_export': 0,
|
|
|
- };
|
|
|
- }).toList();
|
|
|
- if (await BreedingDataService().batchInsertChicken(list)) {
|
|
|
- return ResultModel.success('数据保存成功');
|
|
|
- } else {
|
|
|
- return ResultModel.fail('数据保存失败');
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
Future<ResultModel> cageChange(dynamic data) async {
|
|
|
try {
|
|
|
- if (AppConfig.isOffline) {
|
|
|
- return await cageChangeOffline(data);
|
|
|
+ final ids = data['rfids'] as List<String>;
|
|
|
+ List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
|
|
|
+ return {
|
|
|
+ 'rfid': id,
|
|
|
+ 'target_cage': data['targetCage'],
|
|
|
+ 'date': data['date'],
|
|
|
+ 'is_export': 0,
|
|
|
+ };
|
|
|
+ }).toList();
|
|
|
+ ResultModel result = ResultModel.offline();
|
|
|
+ if (!AppConfig.isOffline) {
|
|
|
+ result = await ApiService().post(
|
|
|
+ cageChangeUrl,
|
|
|
+ data: list,
|
|
|
+ apiOption: ApiOption.noAlert(),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ if (result.isOffline == true || result.isNetError == true) {
|
|
|
+ return await _breedingDataService.batchInsert(
|
|
|
+ TableConfig.cageChange,
|
|
|
+ list,
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ return result;
|
|
|
}
|
|
|
- return await ApiService().postWithOfflineSupport(
|
|
|
- '/app/breeding/cageChange/',
|
|
|
- data: data,
|
|
|
- apiOption: ApiOption.noAlert(),
|
|
|
- );
|
|
|
} catch (e) {
|
|
|
return ResultModel(success: false, message: e.toString(), data: null);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- Future<ResultModel> cageChangeOffline(dynamic data) async {
|
|
|
- // 保存到本地数据库
|
|
|
- final ids = data['rfids'] as List<String>;
|
|
|
- List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
|
|
|
- return {
|
|
|
- 'rfid': id,
|
|
|
- 'target_cage': data['targetCage'],
|
|
|
+ Future<ResultModel> weight(dynamic data) async {
|
|
|
+ try {
|
|
|
+ Map<String, dynamic> weightData = {
|
|
|
+ 'rfid': data['rfid'],
|
|
|
+ 'weight': data['weight'],
|
|
|
'date': data['date'],
|
|
|
'is_export': 0,
|
|
|
};
|
|
|
- }).toList();
|
|
|
- if (await BreedingDataService().batchInsertCageChange(list)) {
|
|
|
- return ResultModel.success('数据保存成功');
|
|
|
- } else {
|
|
|
- return ResultModel.fail('数据保存失败');
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- Future<ResultModel> weight(dynamic data) async {
|
|
|
- try {
|
|
|
- if (AppConfig.isOffline) {
|
|
|
- return await weightOffline(data);
|
|
|
+ ResultModel result = ResultModel.offline();
|
|
|
+ if (!AppConfig.isOffline) {
|
|
|
+ result = await ApiService().post(
|
|
|
+ weightUrl,
|
|
|
+ data: weightData,
|
|
|
+ apiOption: ApiOption.noAlert(),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ if (result.isOffline == true || result.isNetError == true) {
|
|
|
+ return await _breedingDataService.insert(
|
|
|
+ TableConfig.weight,
|
|
|
+ weightData,
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ return result;
|
|
|
}
|
|
|
- return await ApiService().postWithOfflineSupport(
|
|
|
- '/app/breeding/weight/',
|
|
|
- data: data,
|
|
|
- apiOption: ApiOption.noAlert(),
|
|
|
- );
|
|
|
} catch (e) {
|
|
|
return ResultModel(success: false, message: e.toString(), data: null);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- Future<ResultModel> weightOffline(dynamic data) async {
|
|
|
- // 保存到本地数据库
|
|
|
- Map<String, dynamic> weightData = {
|
|
|
- 'rfid': data['rfid'],
|
|
|
- 'weight': data['weight'],
|
|
|
- 'date': data['date'],
|
|
|
- 'is_export': 0,
|
|
|
- };
|
|
|
- if (await BreedingDataService().insertWeight(weightData)) {
|
|
|
- return ResultModel.success('数据保存成功');
|
|
|
- } else {
|
|
|
- return ResultModel.fail('数据保存失败');
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
Future<ResultModel> cull(dynamic data) async {
|
|
|
try {
|
|
|
- if (AppConfig.isOffline) {
|
|
|
- return await cullOffline(data);
|
|
|
+ List<Map<String, dynamic>> list = [
|
|
|
+ {
|
|
|
+ 'rfid': data['rfid'],
|
|
|
+ 'cull_reason': data['cullReason'],
|
|
|
+ 'disposal_method': data['disposalMethod'],
|
|
|
+ 'date': data['date'],
|
|
|
+ 'is_export': 0,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ ResultModel result = ResultModel.offline();
|
|
|
+ if (!AppConfig.isOffline) {
|
|
|
+ result = await ApiService().post(
|
|
|
+ cullUrl,
|
|
|
+ data: list,
|
|
|
+ apiOption: ApiOption.noAlert(),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ if (result.isOffline == true || result.isNetError == true) {
|
|
|
+ return await _breedingDataService.batchInsert(TableConfig.cull, list);
|
|
|
+ } else {
|
|
|
+ return result;
|
|
|
}
|
|
|
- return await ApiService().postWithOfflineSupport(
|
|
|
- '/app/breeding/cull/',
|
|
|
- data: data,
|
|
|
- apiOption: ApiOption.noAlert(),
|
|
|
- );
|
|
|
} catch (e) {
|
|
|
return ResultModel(success: false, message: e.toString(), data: null);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- Future<ResultModel> cullOffline(dynamic data) async {
|
|
|
- // 保存到本地数据库
|
|
|
- Map<String, dynamic> cullData = {
|
|
|
- 'rfid': data['rfid'],
|
|
|
- 'cull_reason': data['cullReason'],
|
|
|
- 'disposal_method': data['disposalMethod'],
|
|
|
- 'date': data['date'],
|
|
|
- 'is_export': 0,
|
|
|
- };
|
|
|
- if (await BreedingDataService().insertCull(cullData)) {
|
|
|
- return ResultModel.success('数据保存成功');
|
|
|
- } else {
|
|
|
- return ResultModel.fail('数据保存失败');
|
|
|
+ Future<ResultModel> batchCull(dynamic data) async {
|
|
|
+ try {
|
|
|
+ List<String> ids = data['rfids'];
|
|
|
+ List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
|
|
|
+ return {
|
|
|
+ 'rfid': id,
|
|
|
+ 'cull_reason': data['cullReason'],
|
|
|
+ 'disposal_method': data['disposalMethod'],
|
|
|
+ 'date': data['date'],
|
|
|
+ 'is_export': 0,
|
|
|
+ };
|
|
|
+ }).toList();
|
|
|
+ ResultModel result = ResultModel.offline();
|
|
|
+ if (!AppConfig.isOffline) {
|
|
|
+ result = await ApiService().post(
|
|
|
+ cullUrl,
|
|
|
+ data: list,
|
|
|
+ apiOption: ApiOption.noAlert(),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ if (result.isOffline == true || result.isNetError == true) {
|
|
|
+ return await _breedingDataService.batchInsert(TableConfig.cull, list);
|
|
|
+ } else {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ return ResultModel(success: false, message: e.toString(), data: null);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- Future<ResultModel> batchCull(dynamic data) async {
|
|
|
+ Future<ResultModel> upload(String type, Map<String, dynamic> data) async {
|
|
|
try {
|
|
|
if (AppConfig.isOffline) {
|
|
|
- return await batchCullOffline(data);
|
|
|
+ return ResultModel.failOffline("脱机模式不支持调用upload接口");
|
|
|
+ }
|
|
|
+ String url = getUrl(type);
|
|
|
+ if (url.isEmpty) {
|
|
|
+ return ResultModel.fail("上传接口不存在");
|
|
|
}
|
|
|
- return await ApiService().postWithOfflineSupport(
|
|
|
- '/app/breeding/batchCull/',
|
|
|
+ return await ApiService().post(
|
|
|
+ url,
|
|
|
data: data,
|
|
|
apiOption: ApiOption.noAlert(),
|
|
|
);
|
|
|
@@ -153,24 +191,20 @@ class BreedSubmitApi {
|
|
|
return ResultModel(success: false, message: e.toString(), data: null);
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
|
|
|
- Future<ResultModel> batchCullOffline(dynamic data) async {
|
|
|
- List<String> ids = data['rfids'];
|
|
|
- List<Map<String, dynamic>> batchCullData = ids.map<Map<String, dynamic>>((
|
|
|
- id,
|
|
|
- ) {
|
|
|
- return {
|
|
|
- 'rfid': id,
|
|
|
- 'cull_reason': data['cullReason'],
|
|
|
- 'disposal_method': data['disposalMethod'],
|
|
|
- 'date': data['date'],
|
|
|
- 'is_export': 0,
|
|
|
- };
|
|
|
- }).toList();
|
|
|
- if (await BreedingDataService().batchInsertCull(batchCullData)) {
|
|
|
- return ResultModel.success('数据保存成功');
|
|
|
- } else {
|
|
|
- return ResultModel.fail('数据保存失败');
|
|
|
- }
|
|
|
+String getUrl(String type) {
|
|
|
+ final prefix = '/app/breeding/';
|
|
|
+ switch (type) {
|
|
|
+ case BreedConfig.chicken:
|
|
|
+ return '${prefix}bindChicken/';
|
|
|
+ case BreedConfig.cageChange:
|
|
|
+ return '${prefix}cageChange/';
|
|
|
+ case BreedConfig.weight:
|
|
|
+ return '${prefix}weight/';
|
|
|
+ case BreedConfig.cull:
|
|
|
+ return '${prefix}cull/';
|
|
|
+ default:
|
|
|
+ return '';
|
|
|
}
|
|
|
}
|