_submit.dart 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  33. result = await ApiService().post(
  34. bindChickenUrl,
  35. data: list,
  36. apiOption: ApiOption.noAlert(),
  37. );
  38. }
  39. if (result.isOffline == true || result.isNetError == true) {
  40. return await _breedingDataService.batchInsert(
  41. TableConfig.chicken,
  42. list,
  43. );
  44. } else {
  45. return result;
  46. }
  47. } catch (e) {
  48. return ResultModel(success: false, message: e.toString(), data: null);
  49. }
  50. }
  51. Future<ResultModel> cageChange(dynamic data) async {
  52. try {
  53. final ids = data['rfids'] as List<String>;
  54. List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
  55. return {
  56. 'rfid': id,
  57. 'target_cage': data['targetCage'],
  58. 'date': data['date'],
  59. 'is_export': 0,
  60. };
  61. }).toList();
  62. ResultModel result = ResultModel.offline();
  63. if (!AppConfig.isOffline &&
  64. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  65. result = await ApiService().post(
  66. cageChangeUrl,
  67. data: list,
  68. apiOption: ApiOption.noAlert(),
  69. );
  70. }
  71. if (result.isOffline == true || result.isNetError == true) {
  72. return await _breedingDataService.batchInsert(
  73. TableConfig.cageChange,
  74. list,
  75. );
  76. } else {
  77. return result;
  78. }
  79. } catch (e) {
  80. return ResultModel(success: false, message: e.toString(), data: null);
  81. }
  82. }
  83. Future<ResultModel> weight(dynamic data) async {
  84. try {
  85. Map<String, dynamic> weightData = {
  86. 'rfid': data['rfid'],
  87. 'weight': data['weight'],
  88. 'date': data['date'],
  89. 'is_export': 0,
  90. };
  91. ResultModel result = ResultModel.offline();
  92. if (!AppConfig.isOffline &&
  93. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  94. result = await ApiService().post(
  95. weightUrl,
  96. data: weightData,
  97. apiOption: ApiOption.noAlert(),
  98. );
  99. }
  100. if (result.isOffline == true || result.isNetError == true) {
  101. return await _breedingDataService.insert(
  102. TableConfig.weight,
  103. weightData,
  104. );
  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. 'rfid': data['rfid'],
  117. 'cull_reason': data['cullReason'],
  118. 'disposal_method': data['disposalMethod'],
  119. 'date': data['date'],
  120. 'is_export': 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['rfids'];
  144. List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
  145. return {
  146. 'rfid': id,
  147. 'cull_reason': data['cullReason'],
  148. 'disposal_method': data['disposalMethod'],
  149. 'date': data['date'],
  150. 'is_export': 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. }
  190. String getUrl(String type) {
  191. final prefix = '/app/breeding/';
  192. switch (type) {
  193. case BreedConfig.chicken:
  194. return '${prefix}bindChicken/';
  195. case BreedConfig.cageChange:
  196. return '${prefix}cageChange/';
  197. case BreedConfig.weight:
  198. return '${prefix}weight/';
  199. case BreedConfig.cull:
  200. return '${prefix}cull/';
  201. default:
  202. return '';
  203. }
  204. }