瀏覽代碼

实现工作站扫码后的逻辑

loki.wu 1 年之前
父節點
當前提交
6225503a62

+ 4 - 0
lib/managers/device.dart

@@ -1,5 +1,6 @@
 import 'dart:convert';
 
+import 'package:fis_common/event/event_type.dart';
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:get/get.dart';
 import 'package:package_info_plus/package_info_plus.dart';
@@ -18,6 +19,9 @@ import 'interfaces/device.dart';
 import 'interfaces/system_setting.dart';
 
 class DeviceManager extends IDeviceManager {
+  /// 在线状态变更事件
+  final FEventHandler<String> onScanCode = FEventHandler<String>();
+
   final _typeConvertMap = <String, String>{
     "Temp": DeviceTypes.TEMP,
     "Weight": DeviceTypes.WEIGHT,

+ 4 - 0
lib/managers/interfaces/device.dart

@@ -1,3 +1,4 @@
+import 'package:fis_common/event/event_type.dart';
 import 'package:vitalapp/managers/interfaces/base.dart';
 
 import 'models/device.dart';
@@ -23,4 +24,7 @@ abstract class IDeviceManager extends IManager {
 
   /// 上报设备(平板)
   Future<void> reportTablet();
+
+  /// 扫码事件
+  final FEventHandler<String> onScanCode = FEventHandler<String>();
 }

+ 76 - 1
lib/pages/medical/widgets/health_check/health_check_list/controller.dart

@@ -2,19 +2,24 @@ import 'package:fis_jsonrpc/rpc.dart';
 import 'package:fis_ui/types/widget_builders.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/utils/datetime.dart';
+import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'package:vitalapp/components/table/table_column.dart';
 import 'package:vitalapp/managers/interfaces/appointment.dart';
+import 'package:vitalapp/managers/interfaces/device.dart';
 import 'package:vitalapp/managers/interfaces/patient.dart';
 import 'package:vitalapp/managers/interfaces/registration.dart';
 import 'package:vitalapp/pages/medical_checkup_station/registration/state/list.dart';
+import 'package:vitalapp/rpc.dart';
 import 'package:vitalapp/store/store.dart';
 
 /// 体检表格控制器
 class HealthCheckListController extends GetxController {
   final appointmentManager = Get.find<IAppointmentManager>();
   final registrationManager = Get.find<IRegistrationManager>();
+  final deviceManager = Get.find<IDeviceManager>();
   final state = ListState();
-
+  final _patientManager = Get.find<IPatientManager>();
   String? checkKey = "HEIBasic";
 
   HealthCheckListController({this.checkKey});
@@ -187,6 +192,7 @@ class HealthCheckListController extends GetxController {
     var startTime = new DateTime(now.year, now.month, now.day);
     var endTime = startTime.add(Duration(hours: 23, minutes: 59, seconds: 59));
     await getRegisterInfoPage(startTime: startTime, endTime: endTime);
+    deviceManager.onScanCode.addListener(_onSacanCode);
   }
 
   void onTap() {}
@@ -202,8 +208,77 @@ class HealthCheckListController extends GetxController {
     _initData();
   }
 
+  @override
+  void dispose() {
+    deviceManager.onScanCode.removeListener(_onSacanCode);
+    super.dispose();
+  }
+
   // @override
   // void onClose() {
   //   super.onClose();
   // }
+
+  Future<void> _onSacanCode(Object sender, String e) async {
+    if (residentList.any((element) => element.physicalExamNumber == e)) {
+      var data =
+          residentList.firstWhere((element) => element.physicalExamNumber == e);
+      await changeHeartCheck(data);
+    } else {
+      RegisterPersonInfoDTO? registerPersonInfo =
+          await _patientManager.getRegisterPersonInfoByPhysicalExamNumberAsync(
+        physicalExamNumber: e,
+      );
+      if (registerPersonInfo == null) {
+        PromptBox.toast("未找到此体检号");
+        return;
+      }
+      String statusStr = '';
+      ExamStateEnum status = registerPersonInfo.state;
+      switch (status) {
+        case ExamStateEnum.Unchecked:
+          statusStr = "未体检";
+          break;
+        case ExamStateEnum.Invalid:
+          statusStr = "已作废";
+          break;
+        case ExamStateEnum.Inspected:
+          statusStr = "已体检";
+          break;
+        case ExamStateEnum.Reported:
+          statusStr = "已报告";
+          break;
+      }
+      await changeHeartCheck(ResidentModel(
+        name: registerPersonInfo.name ?? '',
+        idNumber: registerPersonInfo.iDCardNo ?? '',
+        code: registerPersonInfo.code ?? '',
+        homeAddress: registerPersonInfo.adress,
+        age: getAgeOfIdNumber(registerPersonInfo.iDCardNo ?? ''),
+        physicalExamNumber: registerPersonInfo.physicalExamNumber,
+        phone: registerPersonInfo.phone,
+        finishedExamKeys: registerPersonInfo.finishedExamKeys,
+        physicalExamStatus: statusStr,
+        birthDay: registerPersonInfo.birthday,
+        sex: registerPersonInfo.sex,
+      ));
+    }
+  }
+
+  String getAgeOfIdNumber(String idNumber) {
+    if (idNumber.isEmpty) return '';
+    final idCardRegex = RegExp(r'^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})(\d|X)$');
+    final match = idCardRegex.firstMatch(idNumber);
+    if (match != null) {
+      final year = int.parse(match.group(2)!);
+      final month = int.parse(match.group(3)!);
+      final day = int.parse(match.group(4)!);
+
+      final birthDate = DateTime(year, month, day);
+
+      String age = DataTimeUtils.calculateAge(birthDate);
+      return age;
+    }
+    return ''; // 返回一个默认值
+  }
 }