123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- import 'dart:convert';
- import 'package:fis_common/logger/logger.dart';
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:get/get.dart';
- import 'package:intl/intl.dart';
- import 'package:vitalapp/architecture/defines.dart';
- import 'package:vitalapp/architecture/utils/prompt_box.dart';
- import 'package:vitalapp/global.dart';
- import 'package:vitalapp/managers/interfaces/contract.dart';
- import 'package:vitalapp/managers/interfaces/contract_template.dart';
- import 'package:vitalapp/store/store.dart';
- import 'state.dart';
- class ContractTemplateController extends FControllerBase {
- final state = ContractTemplateControllerState();
- final contractTemplateManager = Get.find<IContractTemplateManager>();
- final _contractManager = Get.find<IContractManager>();
- PatientDTO patient = PatientDTO();
- String servicePackageNames = "";
- String servicePackageCodes = "";
- String serviceTime = "1";
- String serviceStartDate = "";
- String base64Image = "";
- String notes = "";
- String doctorName = "";
- String principalName = "";
- String doctorPhone = "";
- String preceptorName = "";
- String patientPhone = "";
- @override
- void onInit() {
- final p = Get.parameters;
- state.templateCode = p["templateCode"]!;
- patient = PatientDTO.fromJson(json.decode(p["patientInfo"]!));
- servicePackageNames = p["servicePackageNames"] ?? '';
- servicePackageCodes = p["servicePackageCodes"] ?? '';
- serviceTime = p["serviceTime"] ?? '1';
- serviceStartDate = p["serviceStartDate"] ?? '';
- base64Image = p["base64Image"] ?? '';
- notes = p["notes"] ?? '';
- doctorName = p["doctorName"] ?? '';
- principalName = p["principalName"] ?? '';
- doctorPhone = p["doctorPhone"] ?? '';
- preceptorName = p["preceptorName"] ?? '';
- patientPhone = p["patientPhone"] ?? '';
- super.onInit();
- }
- @override
- void onReady() {
- super.onReady();
- loadData();
- }
- Future<void> loadData() async {
- final dto = await contractTemplateManager
- .getContractTemplateDetail(state.templateCode);
- if (dto != null) {
- state.templateContent = dto.templateContent ?? '';
- getkey();
- }
- }
- void getkey() {
- RegExp regExp = RegExp(r'#(.*?)#');
- // Iterable<Match> matches = regExp.allMatches(state.templateContent);
- // for (Match match in matches) {
- // String? key = match.group(1);
- // }
- String replacedString = state.templateContent.replaceAllMapped(
- regExp,
- (match) {
- String? key = match.group(1);
- String value = getValueForKey(key ?? ''); // 自定义函数,根据键获取真实值
- return value;
- },
- );
- state.templateContent = replacedString;
- }
- Future<void> createContractRecord() async {
- var year = DateTime.parse(serviceStartDate).year;
- DateTime startDate = DateTime(year, 1, 1).toUtc();
- final result = await _contractManager.createContractRecordAsync(
- CreateContractRecordRequest(
- contractedPatient: patient.code,
- contractedDoctor: Store.user.userCode,
- contractedTime: DateTime.now(),
- serviceStartDate: startDate,
- serviceEndDate: DateTime(year, 12, 31).toUtc(),
- contractedFileUrl: state.templateContent,
- servicePacks: servicePackageCodes.split('、'),
- photos: ["data:image/png;base64,$base64Image"],
- notes: notes,
- contractedDoctorName: doctorName,
- contractedDoctorPhone: doctorPhone,
- teamLeaderName: principalName,
- preceptorName: preceptorName,
- ),
- );
- if (result != null && result.isNotEmpty) {
- PromptBox.toast("签约成功");
- }
- }
- Future<void> submitContract() async {
- Store.app.busy = true;
- try {
- if (!kIsOnline) {
- // 不支持离线签约
- PromptBox.toast("请检查网络连接");
- return;
- }
- logger.i(
- "ContractTemplateController submitContract,patient.code:${patient.code}");
- await createContractRecord();
- } catch (e) {
- logger.i(
- "ContractTemplateController submitContract fail,patient.code:${patient.code}");
- }
- Store.app.busy = false;
- Get.back();
- await Future.delayed(const Duration(milliseconds: 100));
- Get.back();
- // Get.offNamedUntil("/contract/contract_records", (route) => false);
- }
- String getValueForKey(String key) {
- // 根据键获取真实值的逻辑
- // 这里可以根据你的实际需求进行相应的处理
- if (key == 'doctorName') {
- return doctorName;
- } else if (key == 'principalName') {
- return principalName;
- } else if (key == 'doctorTel') {
- return Store.user.principalPhone;
- } else if (key == 'preceptorName') {
- return preceptorName;
- } else if (key == 'serviceTel') {
- return doctorPhone;
- } else if (key == 'serviceAgency') {
- return Store.user.organizationName;
- } else if (key == 'patientName') {
- return patient.patientName ?? '';
- } else if (key == 'patientAddress') {
- return patient.patientAddress ?? '';
- } else if (key == 'cardNo') {
- return patient.cardNo ?? '';
- } else if (key == 'phone') {
- return patientPhone;
- } else if (key == 'servicesPackageContent') {
- return servicePackageNames;
- } else if (key == 'signaturePartyA') {
- if (Store.user.signature.isEmpty ||
- !Store.user.signature.contains("http")) {
- return '';
- } else {
- return '<img src=${Store.user.signature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
- }
- } else if (key == 'signaturePartyB') {
- if (state.userSignature.isEmpty) {
- return '';
- } else {
- return '<img src=${state.userSignature} style="width: 110px; height: 60px; object-fit:contain" alt="图片">';
- }
- } else if (key == 'signatureDate') {
- final now = DateTime.now();
- final formatter = DateFormat('yyyy-M-d');
- final dateArr = formatter.format(now).split('-');
- return "${dateArr[0]}年${dateArr[1]}月${dateArr[2]}日";
- } else if (key == 'teamName') {
- return Store.user.teamName;
- }
- return ''; // 如果找不到对应的键值,可以返回null或者其他默认值
- }
- }
|