_submit.dart 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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. final String bindChickenUrl = '/app/breeding/bind/';
  14. final String cageChangeUrl = '/app/breeding/cageChange/';
  15. final String weightUrl = '/app/breeding/weight/';
  16. final String cullUrl = '/app/breeding/cull/';
  17. Future<ResultModel> bindChicken(dynamic data) async {
  18. try {
  19. List<String> ids = data['rfids'];
  20. // 保存到本地数据库
  21. List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
  22. return {
  23. 'rfid': id,
  24. 'batch_num': data['batchNum'],
  25. 'family_id': data['familyId'],
  26. 'date': data['date'],
  27. 'is_export': 0,
  28. };
  29. }).toList();
  30. ResultModel result = ResultModel.offline();
  31. if (!AppConfig.isOffline) {
  32. result = await ApiService().post(
  33. bindChickenUrl,
  34. data: list,
  35. apiOption: ApiOption.noAlert(),
  36. );
  37. }
  38. if (result.isOffline == true || result.isNetError == true) {
  39. return await _breedingDataService.batchInsert(
  40. TableConfig.chicken,
  41. list,
  42. );
  43. } else {
  44. return result;
  45. }
  46. } catch (e) {
  47. return ResultModel(success: false, message: e.toString(), data: null);
  48. }
  49. }
  50. Future<ResultModel> cageChange(dynamic data) async {
  51. try {
  52. final ids = data['rfids'] as List<String>;
  53. List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
  54. return {
  55. 'rfid': id,
  56. 'target_cage': data['targetCage'],
  57. 'date': data['date'],
  58. 'is_export': 0,
  59. };
  60. }).toList();
  61. ResultModel result = ResultModel.offline();
  62. if (!AppConfig.isOffline) {
  63. result = await ApiService().post(
  64. cageChangeUrl,
  65. data: list,
  66. apiOption: ApiOption.noAlert(),
  67. );
  68. }
  69. if (result.isOffline == true || result.isNetError == true) {
  70. return await _breedingDataService.batchInsert(
  71. TableConfig.cageChange,
  72. list,
  73. );
  74. } else {
  75. return result;
  76. }
  77. } catch (e) {
  78. return ResultModel(success: false, message: e.toString(), data: null);
  79. }
  80. }
  81. Future<ResultModel> weight(dynamic data) async {
  82. try {
  83. Map<String, dynamic> weightData = {
  84. 'rfid': data['rfid'],
  85. 'weight': data['weight'],
  86. 'date': data['date'],
  87. 'is_export': 0,
  88. };
  89. ResultModel result = ResultModel.offline();
  90. if (!AppConfig.isOffline) {
  91. result = await ApiService().post(
  92. weightUrl,
  93. data: weightData,
  94. apiOption: ApiOption.noAlert(),
  95. );
  96. }
  97. if (result.isOffline == true || result.isNetError == true) {
  98. return await _breedingDataService.insert(
  99. TableConfig.weight,
  100. weightData,
  101. );
  102. } else {
  103. return result;
  104. }
  105. } catch (e) {
  106. return ResultModel(success: false, message: e.toString(), data: null);
  107. }
  108. }
  109. Future<ResultModel> cull(dynamic data) async {
  110. try {
  111. List<Map<String, dynamic>> list = [
  112. {
  113. 'rfid': data['rfid'],
  114. 'cull_reason': data['cullReason'],
  115. 'disposal_method': data['disposalMethod'],
  116. 'date': data['date'],
  117. 'is_export': 0,
  118. },
  119. ];
  120. ResultModel result = ResultModel.offline();
  121. if (!AppConfig.isOffline) {
  122. result = await ApiService().post(
  123. cullUrl,
  124. data: list,
  125. apiOption: ApiOption.noAlert(),
  126. );
  127. }
  128. if (result.isOffline == true || result.isNetError == true) {
  129. return await _breedingDataService.batchInsert(TableConfig.cull, list);
  130. } else {
  131. return result;
  132. }
  133. } catch (e) {
  134. return ResultModel(success: false, message: e.toString(), data: null);
  135. }
  136. }
  137. Future<ResultModel> batchCull(dynamic data) async {
  138. try {
  139. List<String> ids = data['rfids'];
  140. List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
  141. return {
  142. 'rfid': id,
  143. 'cull_reason': data['cullReason'],
  144. 'disposal_method': data['disposalMethod'],
  145. 'date': data['date'],
  146. 'is_export': 0,
  147. };
  148. }).toList();
  149. ResultModel result = ResultModel.offline();
  150. if (!AppConfig.isOffline) {
  151. result = await ApiService().post(
  152. cullUrl,
  153. data: list,
  154. apiOption: ApiOption.noAlert(),
  155. );
  156. }
  157. if (result.isOffline == true || result.isNetError == true) {
  158. return await _breedingDataService.batchInsert(TableConfig.cull, list);
  159. } else {
  160. return result;
  161. }
  162. } catch (e) {
  163. return ResultModel(success: false, message: e.toString(), data: null);
  164. }
  165. }
  166. Future<ResultModel> upload(String type, Map<String, dynamic> data) async {
  167. try {
  168. if (AppConfig.isOffline) {
  169. return ResultModel.failOffline("脱机模式不支持调用upload接口");
  170. }
  171. String url = getUrl(type);
  172. if (url.isEmpty) {
  173. return ResultModel.fail("上传接口不存在");
  174. }
  175. return await ApiService().post(
  176. url,
  177. data: data,
  178. apiOption: ApiOption.noAlert(),
  179. );
  180. } catch (e) {
  181. return ResultModel(success: false, message: e.toString(), data: null);
  182. }
  183. }
  184. }
  185. String getUrl(String type) {
  186. final prefix = '/app/breeding/';
  187. switch (type) {
  188. case BreedConfig.chicken:
  189. return '${prefix}bindChicken/';
  190. case BreedConfig.cageChange:
  191. return '${prefix}cageChange/';
  192. case BreedConfig.weight:
  193. return '${prefix}weight/';
  194. case BreedConfig.cull:
  195. return '${prefix}cull/';
  196. default:
  197. return '';
  198. }
  199. }