controller.dart 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import 'dart:convert';
  2. import 'package:fis_common/logger/logger.dart';
  3. import 'package:fis_jsonrpc/rpc.dart';
  4. import 'package:get/get.dart';
  5. import 'package:intl/intl.dart';
  6. import 'package:vitalapp/architecture/defines.dart';
  7. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  8. import 'package:vitalapp/global.dart';
  9. import 'package:vitalapp/managers/interfaces/contract.dart';
  10. import 'package:vitalapp/managers/interfaces/contract_template.dart';
  11. import 'package:vitalapp/store/store.dart';
  12. import 'state.dart';
  13. class ContractTemplateController extends FControllerBase {
  14. final state = ContractTemplateControllerState();
  15. final contractTemplateManager = Get.find<IContractTemplateManager>();
  16. final _contractManager = Get.find<IContractManager>();
  17. PatientDTO patient = PatientDTO();
  18. String servicePackageNames = "";
  19. String servicePackageCodes = "";
  20. String serviceTime = "1";
  21. String serviceStartDate = "";
  22. String base64Image = "";
  23. String notes = "";
  24. String doctorName = "";
  25. String principalName = "";
  26. String doctorPhone = "";
  27. String preceptorName = "";
  28. String patientPhone = "";
  29. @override
  30. void onInit() {
  31. final p = Get.parameters;
  32. state.templateCode = p["templateCode"]!;
  33. patient = PatientDTO.fromJson(json.decode(p["patientInfo"]!));
  34. servicePackageNames = p["servicePackageNames"] ?? '';
  35. servicePackageCodes = p["servicePackageCodes"] ?? '';
  36. serviceTime = p["serviceTime"] ?? '1';
  37. serviceStartDate = p["serviceStartDate"] ?? '';
  38. base64Image = p["base64Image"] ?? '';
  39. notes = p["notes"] ?? '';
  40. doctorName = p["doctorName"] ?? '';
  41. principalName = p["principalName"] ?? '';
  42. doctorPhone = p["doctorPhone"] ?? '';
  43. preceptorName = p["preceptorName"] ?? '';
  44. patientPhone = p["patientPhone"] ?? '';
  45. super.onInit();
  46. }
  47. @override
  48. void onReady() {
  49. super.onReady();
  50. loadData();
  51. }
  52. Future<void> loadData() async {
  53. final dto = await contractTemplateManager
  54. .getContractTemplateDetail(state.templateCode);
  55. if (dto != null) {
  56. state.templateContent = dto.templateContent ?? '';
  57. getkey();
  58. }
  59. }
  60. void getkey() {
  61. RegExp regExp = RegExp(r'#(.*?)#');
  62. // Iterable<Match> matches = regExp.allMatches(state.templateContent);
  63. // for (Match match in matches) {
  64. // String? key = match.group(1);
  65. // }
  66. String replacedString = state.templateContent.replaceAllMapped(
  67. regExp,
  68. (match) {
  69. String? key = match.group(1);
  70. String value = getValueForKey(key ?? ''); // 自定义函数,根据键获取真实值
  71. return value;
  72. },
  73. );
  74. state.templateContent = replacedString;
  75. }
  76. Future<void> createContractRecord() async {
  77. final result = await _contractManager.createContractRecordAsync(
  78. CreateContractRecordRequest(
  79. contractedPatient: patient.code,
  80. contractedDoctor: Store.user.userCode,
  81. contractedTime: DateTime.now(),
  82. serviceStartDate: DateTime.parse(serviceStartDate),
  83. serviceEndDate: DateTime.parse(serviceStartDate)
  84. .add(Duration(days: 365 * int.parse(serviceTime))),
  85. contractedFileUrl: state.templateContent,
  86. servicePacks: servicePackageCodes.split('、'),
  87. photos: ["data:image/png;base64,$base64Image"],
  88. notes: notes,
  89. ),
  90. );
  91. if (result != null && result.isNotEmpty) {
  92. PromptBox.toast("签约成功");
  93. }
  94. }
  95. Future<void> submitContract() async {
  96. Store.app.busy = true;
  97. try {
  98. if (!kIsOnline) {
  99. // 不支持离线签约
  100. PromptBox.toast("请检查网络连接");
  101. return;
  102. }
  103. logger.i(
  104. "ContractTemplateController submitContract,patient.code:${patient.code}");
  105. await createContractRecord();
  106. } catch (e) {
  107. logger.i(
  108. "ContractTemplateController submitContract fail,patient.code:${patient.code}");
  109. }
  110. Store.app.busy = false;
  111. Get.back();
  112. await Future.delayed(const Duration(milliseconds: 100));
  113. Get.back();
  114. // Get.offNamedUntil("/contract/contract_records", (route) => false);
  115. }
  116. String getValueForKey(String key) {
  117. // 根据键获取真实值的逻辑
  118. // 这里可以根据你的实际需求进行相应的处理
  119. if (key == 'doctorName') {
  120. return doctorName;
  121. } else if (key == 'principalName') {
  122. return principalName;
  123. } else if (key == 'doctorTel') {
  124. return Store.user.principalPhone;
  125. } else if (key == 'preceptorName') {
  126. return preceptorName;
  127. } else if (key == 'serviceTel') {
  128. return doctorPhone;
  129. } else if (key == 'serviceAgency') {
  130. return Store.user.organizationName;
  131. } else if (key == 'patientName') {
  132. return patient.patientName ?? '';
  133. } else if (key == 'patientAddress') {
  134. return patient.patientAddress ?? '';
  135. } else if (key == 'cardNo') {
  136. return patient.cardNo ?? '';
  137. } else if (key == 'phone') {
  138. return patientPhone;
  139. } else if (key == 'servicesPackageContent') {
  140. return servicePackageNames;
  141. } else if (key == 'signaturePartyA') {
  142. if (Store.user.signature.isEmpty ||
  143. !Store.user.signature.contains("http")) {
  144. return '';
  145. } else {
  146. return '<img src=${Store.user.signature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
  147. }
  148. } else if (key == 'signaturePartyB') {
  149. if (state.userSignature.isEmpty) {
  150. return '';
  151. } else {
  152. return '<img src=${state.userSignature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
  153. }
  154. } else if (key == 'signatureDate') {
  155. final now = DateTime.now();
  156. final formatter = DateFormat('yyyy-M-d');
  157. final dateArr = formatter.format(now).split('-');
  158. return "${dateArr[0]}年${dateArr[1]}月${dateArr[2]}日";
  159. } else if (key == 'teamName') {
  160. return Store.user.teamName;
  161. }
  162. return ''; // 如果找不到对应的键值,可以返回null或者其他默认值
  163. }
  164. }