controller.dart 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. var year = DateTime.parse(serviceStartDate).year;
  78. DateTime startDate = DateTime(year, 1, 1).toUtc();
  79. final result = await _contractManager.createContractRecordAsync(
  80. CreateContractRecordRequest(
  81. contractedPatient: patient.code,
  82. contractedDoctor: Store.user.userCode,
  83. contractedTime: DateTime.now(),
  84. serviceStartDate: startDate,
  85. serviceEndDate: DateTime(year, 12, 31).toUtc(),
  86. contractedFileUrl: state.templateContent,
  87. servicePacks: servicePackageCodes.split('、'),
  88. photos: ["data:image/png;base64,$base64Image"],
  89. notes: notes,
  90. contractedDoctorName: doctorName,
  91. contractedDoctorPhone: doctorPhone,
  92. teamLeaderName: principalName,
  93. preceptorName: preceptorName,
  94. ),
  95. );
  96. if (result != null && result.isNotEmpty) {
  97. PromptBox.toast("签约成功");
  98. }
  99. }
  100. Future<void> submitContract() async {
  101. Store.app.busy = true;
  102. try {
  103. if (!kIsOnline) {
  104. // 不支持离线签约
  105. PromptBox.toast("请检查网络连接");
  106. return;
  107. }
  108. logger.i(
  109. "ContractTemplateController submitContract,patient.code:${patient.code}");
  110. await createContractRecord();
  111. } catch (e) {
  112. logger.i(
  113. "ContractTemplateController submitContract fail,patient.code:${patient.code}");
  114. }
  115. Store.app.busy = false;
  116. Get.back();
  117. await Future.delayed(const Duration(milliseconds: 100));
  118. Get.back();
  119. // Get.offNamedUntil("/contract/contract_records", (route) => false);
  120. }
  121. String getValueForKey(String key) {
  122. // 根据键获取真实值的逻辑
  123. // 这里可以根据你的实际需求进行相应的处理
  124. if (key == 'doctorName') {
  125. return doctorName;
  126. } else if (key == 'principalName') {
  127. return principalName;
  128. } else if (key == 'doctorTel') {
  129. return Store.user.principalPhone;
  130. } else if (key == 'preceptorName') {
  131. return preceptorName;
  132. } else if (key == 'serviceTel') {
  133. return doctorPhone;
  134. } else if (key == 'serviceAgency') {
  135. return Store.user.organizationName;
  136. } else if (key == 'patientName') {
  137. return patient.patientName ?? '';
  138. } else if (key == 'patientAddress') {
  139. return patient.patientAddress ?? '';
  140. } else if (key == 'cardNo') {
  141. return patient.cardNo ?? '';
  142. } else if (key == 'phone') {
  143. return patientPhone;
  144. } else if (key == 'servicesPackageContent') {
  145. return servicePackageNames;
  146. } else if (key == 'signaturePartyA') {
  147. if (Store.user.signature.isEmpty ||
  148. !Store.user.signature.contains("http")) {
  149. return '';
  150. } else {
  151. return '<img src=${Store.user.signature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
  152. }
  153. } else if (key == 'signaturePartyB') {
  154. if (state.userSignature.isEmpty) {
  155. return '';
  156. } else {
  157. return '<img src=${state.userSignature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
  158. }
  159. } else if (key == 'signatureDate') {
  160. final now = DateTime.now();
  161. final formatter = DateFormat('yyyy-M-d');
  162. final dateArr = formatter.format(now).split('-');
  163. return "${dateArr[0]}年${dateArr[1]}月${dateArr[2]}日";
  164. } else if (key == 'teamName') {
  165. return Store.user.teamName;
  166. }
  167. return ''; // 如果找不到对应的键值,可以返回null或者其他默认值
  168. }
  169. }