controller.dart 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:get/get.dart';
  3. import 'package:image_picker/image_picker.dart';
  4. import 'package:vitalapp/architecture/defines.dart';
  5. import 'package:vitalapp/architecture/storage/storage.dart';
  6. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  7. import 'package:vitalapp/managers/interfaces/contract.dart';
  8. import 'package:vitalapp/managers/interfaces/contract_template.dart';
  9. import 'package:vitalapp/managers/interfaces/patient.dart';
  10. import 'package:vitalapp/managers/interfaces/service_pack.dart';
  11. import 'package:vitalapp/pages/controllers/crowd_labels.dart';
  12. import 'package:vitalapp/pages/home/controller.dart';
  13. import 'package:vitalapp/rpc.dart';
  14. import 'package:vitalapp/store/store.dart';
  15. import 'state.dart';
  16. class ServicePackageContractController extends FControllerBase {
  17. final state = ServicePackageContractState();
  18. final _patientManager = Get.find<IPatientManager>();
  19. final _servicePackManager = Get.find<IServicePackManager>();
  20. final _contractManager = Get.find<IContractManager>();
  21. final _contractTemplateManager = Get.find<IContractTemplateManager>();
  22. List<LabelDTO> normalOptions = [];
  23. PatientDTO patient = PatientDTO();
  24. String templateCode = '';
  25. @override
  26. void onInit() {
  27. // final p = Get.parameters;
  28. // state.patientCode = p["patientCode"]!;
  29. state.patientCode = Store.user.currentSelectPatientInfo?.code ?? '';
  30. // patientName = Store.user.currentSelectPatientInfo?.patientName ?? '';
  31. super.onInit();
  32. }
  33. @override
  34. void onReady() {
  35. super.onReady();
  36. _loadData();
  37. _loadContractTemplate();
  38. }
  39. Future<void> _loadContractTemplate() async {
  40. final contractTemplateList =
  41. await _contractTemplateManager.getContractTemplatePageAsync();
  42. templateCode = contractTemplateList?.first.code ?? '';
  43. }
  44. Future<void> _loadData() async {
  45. final dto = await _patientManager.getDetail(state.patientCode);
  46. /// server 暂时没根据人群获取服务包列表这边先用全部服务包
  47. final result = await _servicePackManager.getServicePackList(
  48. ServicePackPageRequest(
  49. pageIndex: 1,
  50. pageSize: 20,
  51. ),
  52. );
  53. normalOptions = Get.find<CrowdLabelsController>().state.normalOptions;
  54. state.servicePackageItems = result?.pageData ?? [];
  55. final getServiceItemResult = await _servicePackManager.getServiceItemList(
  56. PageRequest(
  57. pageIndex: 1,
  58. pageSize: 100,
  59. ),
  60. );
  61. state.serviceItems = getServiceItemResult?.pageData ?? [];
  62. if (dto != null) {
  63. dto.birthday = dto.birthday!.toLocal();
  64. state.updateDto(dto);
  65. update();
  66. patient = dto;
  67. }
  68. }
  69. String setNormalLabels(List<String> normalValueList) {
  70. List<String> normalLabels = [];
  71. for (LabelDTO i in normalOptions) {
  72. if (normalValueList.contains(i.code)) {
  73. normalLabels.add(i.labelName ?? '');
  74. }
  75. }
  76. String labels = normalLabels.join('、');
  77. if (labels.isEmpty) {
  78. return '暂无';
  79. }
  80. return labels;
  81. }
  82. Future<void> createContractRecord() async {
  83. await _contractManager.createContractRecordAsync(
  84. CreateContractRecordRequest(
  85. contractedPatient: patient.code,
  86. contractedTime: DateTime.now(),
  87. contractState: ContractStateEnum.Refused,
  88. reason: state.reasonRefusal,
  89. serviceStartDate: DateTime.parse(state.serviceStartDate.toString()),
  90. serviceEndDate: DateTime.parse(state.serviceStartDate.toString())
  91. .add(Duration(days: 365 * int.parse(state.serviceTime.toString()))),
  92. // contractedFileUrl: state.templateContent,
  93. servicePacks: state.selectedServicePackageCode.split('、'),
  94. photos: ["data:image/png;base64,${state.userImage ?? ''}"],
  95. notes: state.notes,
  96. ),
  97. );
  98. }
  99. bool verifyData() {
  100. // todo:人像采集
  101. if (state.userImage == null || state.userImage!.isEmpty) {
  102. PromptBox.toast('未进行人像拍照');
  103. return false;
  104. }
  105. if (state.selectedServicePackageCode.isEmpty) {
  106. PromptBox.toast('未选择服务包');
  107. return false;
  108. }
  109. return true;
  110. }
  111. Future<void> submitContract() async {
  112. if (state.isDenySbaVisa &&
  113. (state.reasonRefusal == null || state.reasonRefusal!.isEmpty)) {
  114. PromptBox.toast('未选择拒签原因');
  115. return;
  116. }
  117. await createContractRecord();
  118. Get.back();
  119. }
  120. List<ServiceItemDTO> getServiceItemsName(List<String> serviceItems) {
  121. List<ServiceItemDTO> serviceItemNames = [];
  122. for (var element in state.serviceItems) {
  123. if (serviceItems.contains(element.code)) {
  124. serviceItemNames.add(element);
  125. }
  126. }
  127. if (serviceItemNames.isEmpty) {
  128. return [];
  129. }
  130. return serviceItemNames.reversed.toList();
  131. }
  132. void processingPortraits() async {
  133. XFile? image = await ImagePicker().pickImage(source: ImageSource.camera);
  134. Store.app.busy = true;
  135. final url = await rpc.storage.upload(image!);
  136. state.userImage = url;
  137. Store.app.busy = false;
  138. }
  139. // 切换选择的服务包
  140. void changeServicePackage(ServicePackDTO servicePackDTO) {
  141. List<ServicePackDTO> selectedServicePackage = state.selectedServicePackage;
  142. if (state.selectedServicePackage.contains(servicePackDTO)) {
  143. selectedServicePackage.remove(servicePackDTO);
  144. } else {
  145. selectedServicePackage.add(servicePackDTO);
  146. }
  147. state.selectedServicePackage = selectedServicePackage;
  148. setSelectedServicePackages();
  149. }
  150. void setSelectedServicePackages() {
  151. List<String> selectedServicePackageNameList = [];
  152. List<String> selectedServicePackageCodeList = [];
  153. for (var element in state.selectedServicePackage) {
  154. selectedServicePackageNameList.add(element.name ?? "");
  155. selectedServicePackageCodeList.add(element.code ?? "");
  156. }
  157. state.selectedServicePackageName = selectedServicePackageNameList.join('、');
  158. state.selectedServicePackageCode = selectedServicePackageCodeList.join('、');
  159. }
  160. }