_submit.dart 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. import 'package:chicken_farm/core/api/api_option.dart';
  2. import 'package:chicken_farm/core/api/api_service.dart';
  3. import 'package:chicken_farm/core/config/app_config.dart';
  4. import 'package:chicken_farm/core/config/breed_config.dart';
  5. import 'package:chicken_farm/core/db/table_config.dart';
  6. import 'package:chicken_farm/core/services/breeding_data_service.dart';
  7. import 'package:chicken_farm/modes/api/result_model.dart';
  8. class BreedSubmitApi {
  9. static final BreedSubmitApi _instance = BreedSubmitApi._internal();
  10. factory BreedSubmitApi() => _instance;
  11. BreedSubmitApi._internal();
  12. final BreedingDataService _breedingDataService = BreedingDataService();
  13. static final String apiPrefix = '/app/breeding';
  14. final String bindChickenUrl = '$apiPrefix/batchAddChicken';
  15. final String cageChangeUrl = '$apiPrefix/batchChangeCage';
  16. final String weightUrl = '$apiPrefix/batchChickenWeight';
  17. final String cullUrl = '$apiPrefix/batchCullChicken';
  18. Future<ResultModel> bindChicken(dynamic data) async {
  19. try {
  20. List<String> ids = data['electronicIds'];
  21. // 保存到本地数据库
  22. List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
  23. return {
  24. 'electronicId': id,
  25. 'batchNum': data['batchNum'],
  26. 'familyNum': data['familyNum'],
  27. // 'cageNum': data['cageNum'],
  28. // 'gender': data['gender'] ?? 2,
  29. 'isExport': 0,
  30. };
  31. }).toList();
  32. ResultModel result = ResultModel.offline();
  33. if (!AppConfig.isOffline &&
  34. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  35. result = await ApiService().post(
  36. bindChickenUrl,
  37. data: list,
  38. apiOption: ApiOption.noAlert(),
  39. );
  40. }
  41. if (result.isOffline == true || result.isNetError == true) {
  42. return await _breedingDataService.batchInsert(
  43. TableConfig.chicken,
  44. list,
  45. );
  46. } else {
  47. return result;
  48. }
  49. } catch (e) {
  50. return ResultModel(success: false, message: e.toString(), data: null);
  51. }
  52. }
  53. Future<ResultModel> cageChange(dynamic data) async {
  54. try {
  55. final ids = data['electronicIds'] as List<String>;
  56. List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
  57. return {
  58. 'electronicId': id,
  59. 'targetCageNum': data['targetCage'],
  60. 'bindTime': data['date'],
  61. 'isExport': 0,
  62. };
  63. }).toList();
  64. ResultModel result = ResultModel.offline();
  65. if (!AppConfig.isOffline &&
  66. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  67. result = await ApiService().post(
  68. cageChangeUrl,
  69. data: list,
  70. apiOption: ApiOption.noAlert(),
  71. );
  72. }
  73. if (result.isOffline == true || result.isNetError == true) {
  74. return await _breedingDataService.batchInsert(
  75. TableConfig.cageChange,
  76. list,
  77. );
  78. } else {
  79. return result;
  80. }
  81. } catch (e) {
  82. return ResultModel(success: false, message: e.toString(), data: null);
  83. }
  84. }
  85. Future<ResultModel> weight(dynamic data) async {
  86. try {
  87. Map<String, dynamic> weightData = {
  88. 'electronicId': data['electronicId'],
  89. 'weightValue': data['weight'],
  90. 'recordDate': data['date'],
  91. 'isExport': 0,
  92. };
  93. List<Map<String, dynamic>> list = [weightData].toList();
  94. ResultModel result = ResultModel.offline();
  95. if (!AppConfig.isOffline &&
  96. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  97. result = await ApiService().post(
  98. weightUrl,
  99. data: list,
  100. apiOption: ApiOption.noAlert(),
  101. );
  102. }
  103. if (result.isOffline == true || result.isNetError == true) {
  104. return await _breedingDataService.batchInsert(TableConfig.weight, list);
  105. } else {
  106. return result;
  107. }
  108. } catch (e) {
  109. return ResultModel(success: false, message: e.toString(), data: null);
  110. }
  111. }
  112. Future<ResultModel> cull(dynamic data) async {
  113. try {
  114. List<Map<String, dynamic>> list = [
  115. {
  116. 'electronicId': data['electronicId'],
  117. 'cullReason': data['cullReason'],
  118. 'disposalMethod': data['disposalMethod'],
  119. 'cullTime': data['date'],
  120. 'isExport': 0,
  121. },
  122. ];
  123. ResultModel result = ResultModel.offline();
  124. if (!AppConfig.isOffline &&
  125. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  126. result = await ApiService().post(
  127. cullUrl,
  128. data: list,
  129. apiOption: ApiOption.noAlert(),
  130. );
  131. }
  132. if (result.isOffline == true || result.isNetError == true) {
  133. return await _breedingDataService.batchInsert(TableConfig.cull, list);
  134. } else {
  135. return result;
  136. }
  137. } catch (e) {
  138. return ResultModel(success: false, message: e.toString(), data: null);
  139. }
  140. }
  141. Future<ResultModel> batchCull(dynamic data) async {
  142. try {
  143. List<String> ids = data['electronicIds'];
  144. List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
  145. return {
  146. 'electronicId': data['electronicId'],
  147. 'cullReason': data['cullReason'],
  148. 'disposalMethod': data['disposalMethod'],
  149. 'cullTime': data['date'],
  150. 'isExport': 0,
  151. };
  152. }).toList();
  153. ResultModel result = ResultModel.offline();
  154. if (!AppConfig.isOffline &&
  155. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  156. result = await ApiService().post(
  157. cullUrl,
  158. data: list,
  159. apiOption: ApiOption.noAlert(),
  160. );
  161. }
  162. if (result.isOffline == true || result.isNetError == true) {
  163. return await _breedingDataService.batchInsert(TableConfig.cull, list);
  164. } else {
  165. return result;
  166. }
  167. } catch (e) {
  168. return ResultModel(success: false, message: e.toString(), data: null);
  169. }
  170. }
  171. Future<ResultModel> upload(String type, Map<String, dynamic> data) async {
  172. try {
  173. if (AppConfig.isOffline) {
  174. return ResultModel.failOffline("脱机模式不支持调用upload接口");
  175. }
  176. String url = getUrl(type);
  177. if (url.isEmpty) {
  178. return ResultModel.fail("上传接口不存在");
  179. }
  180. return await ApiService().post(
  181. url,
  182. data: data,
  183. apiOption: ApiOption.noAlert(),
  184. );
  185. } catch (e) {
  186. return ResultModel(success: false, message: e.toString(), data: null);
  187. }
  188. }
  189. String getUrl(String type) {
  190. switch (type) {
  191. case BreedConfig.chicken:
  192. return '$apiPrefix/bindChicken';
  193. case BreedConfig.cageChange:
  194. return '$apiPrefix/cageChange';
  195. case BreedConfig.weight:
  196. return '$apiPrefix/weight';
  197. case BreedConfig.cull:
  198. return '$apiPrefix/cull';
  199. default:
  200. return '';
  201. }
  202. }
  203. }