_submit.dart 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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/chickenWeight';
  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. ResultModel result = ResultModel.offline();
  94. if (!AppConfig.isOffline &&
  95. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  96. result = await ApiService().post(
  97. weightUrl,
  98. data: weightData,
  99. apiOption: ApiOption.noAlert(),
  100. );
  101. }
  102. if (result.isOffline == true || result.isNetError == true) {
  103. return await _breedingDataService.insert(
  104. TableConfig.weight,
  105. weightData,
  106. );
  107. } else {
  108. return result;
  109. }
  110. } catch (e) {
  111. return ResultModel(success: false, message: e.toString(), data: null);
  112. }
  113. }
  114. Future<ResultModel> cull(dynamic data) async {
  115. try {
  116. List<Map<String, dynamic>> list = [
  117. {
  118. 'electronicId': data['electronicId'],
  119. 'cullReason': data['cullReason'],
  120. 'disposalMethod': data['disposalMethod'],
  121. 'cullTime': data['date'],
  122. 'isExport': 0,
  123. },
  124. ];
  125. ResultModel result = ResultModel.offline();
  126. if (!AppConfig.isOffline &&
  127. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  128. result = await ApiService().post(
  129. cullUrl,
  130. data: list,
  131. apiOption: ApiOption.noAlert(),
  132. );
  133. }
  134. if (result.isOffline == true || result.isNetError == true) {
  135. return await _breedingDataService.batchInsert(TableConfig.cull, list);
  136. } else {
  137. return result;
  138. }
  139. } catch (e) {
  140. return ResultModel(success: false, message: e.toString(), data: null);
  141. }
  142. }
  143. Future<ResultModel> batchCull(dynamic data) async {
  144. try {
  145. List<String> ids = data['electronicIds'];
  146. List<Map<String, dynamic>> list = ids.map<Map<String, dynamic>>((id) {
  147. return {
  148. 'electronicId': data['electronicId'],
  149. 'cullReason': data['cullReason'],
  150. 'disposalMethod': data['disposalMethod'],
  151. 'cullTime': data['date'],
  152. 'isExport': 0,
  153. };
  154. }).toList();
  155. ResultModel result = ResultModel.offline();
  156. if (!AppConfig.isOffline &&
  157. await _breedingDataService.queryCount(TableConfig.chicken) == 0) {
  158. result = await ApiService().post(
  159. cullUrl,
  160. data: list,
  161. apiOption: ApiOption.noAlert(),
  162. );
  163. }
  164. if (result.isOffline == true || result.isNetError == true) {
  165. return await _breedingDataService.batchInsert(TableConfig.cull, list);
  166. } else {
  167. return result;
  168. }
  169. } catch (e) {
  170. return ResultModel(success: false, message: e.toString(), data: null);
  171. }
  172. }
  173. Future<ResultModel> upload(String type, Map<String, dynamic> data) async {
  174. try {
  175. if (AppConfig.isOffline) {
  176. return ResultModel.failOffline("脱机模式不支持调用upload接口");
  177. }
  178. String url = getUrl(type);
  179. if (url.isEmpty) {
  180. return ResultModel.fail("上传接口不存在");
  181. }
  182. return await ApiService().post(
  183. url,
  184. data: data,
  185. apiOption: ApiOption.noAlert(),
  186. );
  187. } catch (e) {
  188. return ResultModel(success: false, message: e.toString(), data: null);
  189. }
  190. }
  191. String getUrl(String type) {
  192. switch (type) {
  193. case BreedConfig.chicken:
  194. return '$apiPrefix/bindChicken';
  195. case BreedConfig.cageChange:
  196. return '$apiPrefix/cageChange';
  197. case BreedConfig.weight:
  198. return '$apiPrefix/weight';
  199. case BreedConfig.cull:
  200. return '$apiPrefix/cull';
  201. default:
  202. return '';
  203. }
  204. }
  205. }