controller.dart 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. import 'dart:convert';
  2. import 'package:fis_common/extensions/string.dart';
  3. import 'package:fis_jsonrpc/rpc.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:get/get.dart';
  6. import 'package:vitalapp/architecture/utils/datetime.dart';
  7. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  8. import 'package:vitalapp/managers/interfaces/follow_up.dart';
  9. import 'package:vitalapp/managers/interfaces/prescription.dart';
  10. import 'package:vitalapp/pages/check/follow_up/state.dart';
  11. import 'package:vitalapp/pages/check/models/form.dart';
  12. import 'package:vitalapp/pages/form/form_info.dart';
  13. import 'package:vitalapp/store/store.dart';
  14. class FollowUpController extends GetxController {
  15. FollowUpController();
  16. final state = FollowUpState();
  17. final _followUpManager = Get.find<IFollowUpManager>();
  18. final _prescriptionManager = Get.find<IPrescriptionManager>();
  19. late String patientCode = "";
  20. late String patientName = "";
  21. _initData() {
  22. update(["follow_up"]);
  23. // final p = Get.parameters;
  24. patientCode = Store.user.currentSelectPatientInfo?.code ?? '';
  25. patientName = Store.user.currentSelectPatientInfo?.patientName ?? '';
  26. }
  27. void onTap() {}
  28. List<MenuItem> menuList = [
  29. // MenuItem(label: "肺结核随访服务", value: 'FJHSFFW'),
  30. // MenuItem(label: "肺结核入户随访", value: 'FJHRHSF'),
  31. // MenuItem(label: "冠心病", value: 'GXB'),
  32. // MenuItem(label: "脑卒中", value: 'NCZ'),
  33. // MenuItem(label: "严重精神障碍随访服务", value: 'YZJSZASFFW'),
  34. // MenuItem(label: "严重精神障碍个人信息补充", value: 'YZJSZAGRXXBC'),
  35. MenuItem(label: "2 型糖尿病", value: 'TNB'),
  36. MenuItem(label: "高血压", value: 'GXY'),
  37. MenuItem(label: "老年人中医药健康管理服务记录表", value: 'LNRZYYJKGLFWJL'),
  38. // MenuItem(label: "老年人生活自理能力评估表", value: 'LNRSHZLNLPGB'),
  39. // MenuItem(label: "产后42天健康检查列表", value: 'YCF_CH42TJKJCLB'),
  40. // MenuItem(label: "产后访视列表", value: 'YCF_CHFSLB'),
  41. // MenuItem(label: "2~5次产前随访列表", value: 'YCF_2_5CCQSFLB'),
  42. // MenuItem(label: "第一次产前检查列表", value: 'YCF_DYCCQJCLB'),
  43. // MenuItem(label: "基本信息", value: 'YCF_JBXX'),
  44. // MenuItem(label: "儿童中医药健康管理列表", value: 'ET_ZYYJKGLLB'),
  45. MenuItem(label: "满月儿童健康检查", value: 'ET_1MSETJKJCLB'),
  46. MenuItem(label: "3月龄儿童健康检查", value: 'ET_3MSETJKJCLB'),
  47. MenuItem(label: "6月龄儿童健康检查", value: 'ET_6MSETJKJCLB'),
  48. MenuItem(label: "8月龄儿童健康检查", value: 'ET_8MSETJKJCLB'),
  49. MenuItem(label: "12月儿童健康检查", value: 'ET_12MSETJKJCLB'),
  50. MenuItem(label: "18月儿童健康检查", value: 'ET_18MSETJKJCLB'),
  51. MenuItem(label: "24月儿童健康检查", value: 'ET_24MSETJKJCLB'),
  52. MenuItem(label: "30月儿童健康检查", value: 'ET_30MSETJKJCLB'),
  53. MenuItem(label: "3岁儿童健康检查", value: 'ET_3SETJKJCLB'),
  54. MenuItem(label: "4岁儿童健康检查", value: 'ET_4SETJKJCLB'),
  55. MenuItem(label: "5岁儿童健康检查", value: 'ET_5SETJKJCLB'),
  56. MenuItem(label: "6岁儿童健康检查", value: 'ET_6SETJKJCLB'),
  57. // MenuItem(label: "1~2岁儿童健康检查列表", value: 'ET_1_2SETJKJCLB'),
  58. // MenuItem(label: "1岁内儿童健康检查列表", value: 'ET_1SNETJKJCLB'),
  59. // MenuItem(label: "新生儿访视列表", value: 'ET_XSEFSLB'),
  60. ];
  61. // @override
  62. // void onInit() {
  63. // super.onInit();
  64. // }
  65. ///校验严重精神障碍、糖尿病、高血压、肺结核等处方是否有填充数据
  66. Future<bool> _checkPrecription(Map<String, dynamic> value) async {
  67. var keys = FormInfo.instance.formValue.keys.toList();
  68. int targetLength = 3;
  69. if (Store.user.signature.isNotNullOrEmpty) {
  70. targetLength = 4;
  71. }
  72. if (value.length == targetLength &&
  73. keys.contains("PatientName") &&
  74. keys.contains("PatientGender") &&
  75. keys.contains("PatientAge")) {
  76. var age = DataTimeUtils.calculateAge(
  77. Store.user.currentSelectPatientInfo!.birthday!);
  78. var currentPatient = Store.user.currentSelectPatientInfo;
  79. String patientGender = "";
  80. if (currentPatient?.patientGender == GenderEnum.Male) {
  81. patientGender = "1";
  82. } else if (currentPatient?.patientGender == GenderEnum.Female) {
  83. patientGender = "2";
  84. }
  85. if (value["PatientName"] == currentPatient?.patientName &&
  86. value["PatientAge"] == age &&
  87. value["PatientGender"] == patientGender) {
  88. ///经和测试讨论,如果一个表格只存在默认填充的数据,则不提交
  89. return true;
  90. }
  91. }
  92. return false;
  93. }
  94. Future<bool> createFollowUp(
  95. key, templateCode, data, String prescriptionKey) async {
  96. bool isCalibrationPrescriptions = [
  97. "YZJSZASFFW",
  98. "FollowUpTuberculosisRecord",
  99. "GXY",
  100. "TNB"
  101. ].contains(key);
  102. if (["GXY", "TNB"].contains(key)) {
  103. if (state.followUpTime == null ||
  104. state.nextFollowUpTime == null ||
  105. state.followUpMode == null) {
  106. PromptBox.snackbar("",
  107. messageText: RichText(
  108. text: TextSpan(
  109. children: [
  110. TextSpan(
  111. text: "带",
  112. style: const TextStyle(
  113. color: Colors.black,
  114. fontSize: 30,
  115. fontFamily: "NotoSansSC",
  116. fontFamilyFallback: const ["NotoSansSC"],
  117. ),
  118. ),
  119. TextSpan(
  120. text: " * ",
  121. style: const TextStyle(color: Colors.red, fontSize: 35),
  122. ),
  123. TextSpan(
  124. text: "为必填项,不能为空",
  125. style: const TextStyle(
  126. color: Colors.black,
  127. fontSize: 30,
  128. fontFamily: "NotoSansSC",
  129. fontFamilyFallback: const ["NotoSansSC"],
  130. ),
  131. ),
  132. ],
  133. ),
  134. ));
  135. return false;
  136. }
  137. }
  138. ///校验随访和处方数据
  139. if (data.length < 7) {
  140. if (!isCalibrationPrescriptions ||
  141. (await _checkPrecription(FormInfo.instance.formValue))) {
  142. PromptBox.toast('不能提交空数据');
  143. return false;
  144. }
  145. }
  146. /// 校验本次随访时间不能晚于下次随访时间
  147. if (state.followUpTime != null &&
  148. state.nextFollowUpTime != null &&
  149. state.followUpTime!.isAfter(state.nextFollowUpTime!)) {
  150. PromptBox.toast('本次随访时间不能晚于下次随访时间');
  151. return false;
  152. }
  153. List<String> followUpPhotos = [];
  154. if (state.followUpPhoto?.isNotEmpty ?? false) {
  155. followUpPhotos = [state.followUpPhoto!];
  156. }
  157. var request = CreateFollowUpRequest(
  158. key: key,
  159. patientCode: patientCode,
  160. templateCode: templateCode,
  161. followUpData: data,
  162. followUpTime: state.followUpTime,
  163. nextFollowUpTime: state.nextFollowUpTime,
  164. followUpMode: state.followUpMode ?? FollowUpModeEnum.Outpatient,
  165. followUpPhotos: followUpPhotos,
  166. );
  167. print(jsonEncode(request.toJson()));
  168. final result = await _followUpManager.createFollowUp(request);
  169. if (result.isNotEmpty && prescriptionKey.isNotEmpty) {
  170. await createPrescription(result, prescriptionKey);
  171. PromptBox.toast('保存成功');
  172. }
  173. return true;
  174. }
  175. Future<String> createFollowUpOnly(
  176. String key, String templateCode, String data) async {
  177. List<String> followUpPhotos = [];
  178. if (state.followUpPhoto?.isNotEmpty ?? false) {
  179. followUpPhotos = [state.followUpPhoto!];
  180. }
  181. var request = CreateFollowUpRequest(
  182. key: key,
  183. patientCode: patientCode,
  184. templateCode: templateCode,
  185. followUpData: data,
  186. followUpTime: state.followUpTime,
  187. nextFollowUpTime: state.nextFollowUpTime,
  188. followUpMode: state.followUpMode ?? FollowUpModeEnum.Outpatient,
  189. followUpPhotos: followUpPhotos,
  190. );
  191. print(jsonEncode(request.toJson()));
  192. final result = await _followUpManager.createFollowUp(request);
  193. return result;
  194. }
  195. Future<String?> createPrescription(
  196. String followUpCode, String prescriptionKey) async {
  197. if (FormInfo.instance.formValue.isEmpty) {
  198. return null;
  199. }
  200. /// 创建处方
  201. String? prescriptionCode = await _prescriptionManager.createPrescription(
  202. patientCode: patientCode,
  203. followUpCode: followUpCode,
  204. prescriptionKey: prescriptionKey,
  205. prescriptionData: jsonEncode(FormInfo.instance.formValue),
  206. );
  207. FormInfo.instance.formValue.clear();
  208. return prescriptionCode;
  209. }
  210. @override
  211. void onReady() {
  212. super.onReady();
  213. _initData();
  214. }
  215. // @override
  216. // void onClose() {
  217. // super.onClose();
  218. // }
  219. }