123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- import 'dart:convert';
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:get/get.dart';
- import 'package:vitalapp/architecture/defines.dart';
- import 'package:vitalapp/architecture/utils/prompt_box.dart';
- import 'package:vitalapp/architecture/values/features.dart';
- import 'package:vitalapp/global.dart';
- import 'package:vitalapp/managers/interfaces/patient.dart';
- import 'package:vitalapp/managers/interfaces/service_pack.dart';
- import 'package:vitalapp/pages/patient/detail/controller.dart';
- import 'package:vitalapp/pages/patient_info/controller.dart';
- import 'package:vitalapp/pages/patient_info/state.dart';
- import 'package:vitalapp/store/store.dart';
- import 'state.dart';
- import 'widgets/ext_model.dart';
- class PatientInfoController extends FControllerBase {
- final state = PatientInfoState();
- final _patientManager = Get.find<IPatientManager>();
- final patientInfomation = Get.find<PatientInfomationController>();
- PatientInfomationState get patientInfomationState => patientInfomation.state;
- String get cardNo => Store.user.currentSelectPatientInfo?.cardNo ?? '';
- @override
- void onInit() {
- // final p = Get.parameters;
- // state.code = p["code"]!;
- super.onInit();
- }
- @override
- void onReady() {
- super.onReady();
- patientInfomationState.code = cardNo;
- Get.find<IServicePackManager>().getServicePackList(ServicePackPageRequest(
- pageIndex: 1,
- pageSize: 20,
- ));
- _loadData();
- }
- Future<void> _loadData() async {
- final dto = await _patientManager.getDetail(cardNo);
- if (dto != null) {
- dto.birthday = dto.birthday!.toLocal();
- patientInfomationState.updateDto(dto);
- }
- try {
- getPatientExtensionDetailAsync();
- } catch (e) {
- PromptBox.toast("加载详细信息错误");
- }
- }
- Future<bool> updatePatientAsync() async {
- await createPatientExtensionAsync();
- var message = await _validateForm();
- if (message != null) {
- PromptBox.toast(message);
- return false;
- }
- UpdatePatientRequest2 request = UpdatePatientRequest2(
- token: Store.user.token,
- code: patientInfomationState.code,
- patientName: patientInfomationState.name,
- phone: patientInfomationState.phoneNo,
- emergencyName: patientInfomationState.emergencyName,
- emergencyPhone: patientInfomationState.emergencyPhone,
- cardNo: patientInfomationState.cardNo,
- nationality: patientInfomationState.nation,
- birthday: patientInfomationState.birthday,
- cardType: patientInfomationState.cardType,
- patientGender: patientInfomationState.gender ?? GenderEnum.Unspecified,
- patientAddress: patientInfomationState.address,
- crowdLabels:
- _patientManager.crowdLabelsConvert(patientInfomationState.labels),
- permanentResidenceAddress:
- patientInfomationState.permanentResidenceAddress,
- );
- bool result = await _patientManager.updatePatientAsync(request);
- if (!result) {
- return false;
- }
- if (Store.user.hasFeature(FeatureKeys.HealthInformation)) {
- result = await createPatientExtensionAsync();
- }
- // TODO: 更新离线状态
- if (!kIsOnline) {
- // _patientManager.create(request)
- }
- return result;
- }
- bool isNumeric(String str) {
- if (str.isEmpty) {
- return false;
- }
- return double.tryParse(str) != null;
- }
- Future<String?> _validateForm() async {
- if (patientInfomationState.name.isEmpty) {
- return "请填写姓名";
- }
- if (patientInfomationState.phoneNo.isNotEmpty) {
- if (patientInfomationState.phoneNo.length != 11 ||
- !isNumeric(patientInfomationState.phoneNo)) {
- return "请填写正确的联系电话";
- }
- }
- if (patientInfomationState.emergencyPhone.isNotEmpty) {
- if (patientInfomationState.emergencyPhone.length != 11 ||
- !isNumeric(patientInfomationState.emergencyPhone)) {
- return "请填写正确的联系人电话";
- }
- }
- return null;
- }
- Future<bool> createPatientExtensionAsync() async {
- final jsonMap = <String, dynamic>{};
- final detailJsonMap = patientInfomationState.detailInfo.toJson();
- final healthJsonMap = patientInfomationState.healthInfo.toJson();
- jsonMap.addAll(detailJsonMap);
- jsonMap.addAll(healthJsonMap);
- jsonMap.removeWhere((key, value) => value == null);
- if (!kIsOnline) {
- if (state.healthCode.startsWith("mock")) {
- state.healthCode = ""; // TODO:update from server
- }
- }
- if (state.healthCode.isNotEmpty) {
- var request = UpdatePatientExtensionRequest(
- code: state.healthCode,
- token: Store.user.token,
- patientCode: cardNo,
- key: "PatientHealthInfo",
- extensionData: jsonEncode(jsonMap),
- );
- var result = await _patientManager.updatePatientExtensionAsync(request);
- if (result) {}
- } else {
- var request = CreatePatientExtensionRequest(
- token: Store.user.token,
- patientCode: cardNo,
- key: "PatientHealthInfo",
- extensionData: jsonEncode(jsonMap),
- );
- var result = await _patientManager.createPatientExtensionAsync(request);
- if (result.isNotEmpty) {
- state.healthCode = result;
- }
- }
- ///更新
- return true;
- }
- Future<void> getPatientExtensionDetailAsync() async {
- var request = GetPatientExtensionByCodeAndKeyRequest(
- token: Store.user.token,
- patientCode: cardNo,
- key: "PatientHealthInfo",
- );
- var result = await _patientManager
- .getPatientExtensionDetailByCodeAndKeyAsync(request);
- if (result != null && result.code != null) {
- state.healthCode = result.code!;
- String jsonText = result.extensionData ?? "";
- if (jsonText.isEmpty) {
- jsonText = "{}";
- }
- var jsonMap = jsonDecode(jsonText);
- patientInfomationState.detailInfo =
- PatientDetailInfoModel.fromJson(jsonMap);
- patientInfomationState.healthInfo =
- PatientHealthInfoModel.fromJson(jsonMap);
- }
- }
- Future<void> changePatient() async {
- PatientDTO? patientInfoDto = await _patientManager
- .getDetail(Store.user.currentSelectPatientInfo!.cardNo!);
- if (patientInfoDto != null) {
- // 更新最新信息
- await _patientManager.switchCurrentPatient(patientInfoDto);
- }
- patientInfomationState.updateDto(patientInfoDto!);
- Get.find<PatientDetailController>().loadData();
- }
- /// 切换导航锚点
- void switchAnchor(NavAnchorType anchor) {
- state.anchor = anchor;
- }
- }
|