|
@@ -1,6 +1,7 @@
|
|
|
import 'dart:convert';
|
|
|
|
|
|
import 'package:fis_jsonrpc/rpc.dart';
|
|
|
+import 'package:vital_local_database/index.dart';
|
|
|
import 'package:vitalapp/database/db.dart';
|
|
|
import 'package:vitalapp/database/entities/patient.dart';
|
|
|
import 'package:fis_common/logger/logger.dart';
|
|
@@ -10,22 +11,37 @@ class PatientServiceMock extends VitalPatientService {
|
|
|
|
|
|
@override
|
|
|
Future<String> createPatientAsync(CreatePatientRequest request) async {
|
|
|
- final cardNo = request.cardNo;
|
|
|
+ final code = request.code!;
|
|
|
+ final existEntity = await _checkPatientExist(code);
|
|
|
|
|
|
- // final dto = _ModelConverter.create2Dto(request);
|
|
|
- // final dtoJson = dto.toJson();
|
|
|
+ PatientEntity entity;
|
|
|
+ PatientDTO dto;
|
|
|
+ if (existEntity == null) {
|
|
|
+ entity = PatientEntity();
|
|
|
+ entity.code = request.code!;
|
|
|
+ entity.isValid = true;
|
|
|
+ entity.name = request.patientName!;
|
|
|
|
|
|
- // final entity = PatientEntity();
|
|
|
- // entity.code = request.code!;
|
|
|
- // entity.isValid = true;
|
|
|
- // entity.name = request.patientName!;
|
|
|
- // entity.dataJson = jsonEncode(dtoJson);
|
|
|
+ dto = PatientDTO();
|
|
|
+ _ModelConverter.syncCreate2Dto(dto, request);
|
|
|
|
|
|
- // final id = await db.repositories.patient.insert(entity);
|
|
|
- // print("Patient Id: $id");
|
|
|
+ final dtoJson = dto.toJson();
|
|
|
+ entity.dataJson = jsonEncode(dtoJson);
|
|
|
|
|
|
- // return id > 0 ? entity.code : null;
|
|
|
- return request.code!;
|
|
|
+ final id = await db.repositories.patient.insert(entity);
|
|
|
+ return id > 0 ? code : "";
|
|
|
+ } else {
|
|
|
+ entity = existEntity;
|
|
|
+ final jsonMap = jsonDecode(entity.dataJson);
|
|
|
+ dto = PatientDTO.fromJson(jsonMap);
|
|
|
+ _ModelConverter.syncCreate2Dto(dto, request);
|
|
|
+
|
|
|
+ final dtoJson = dto.toJson();
|
|
|
+ entity.dataJson = jsonEncode(dtoJson);
|
|
|
+
|
|
|
+ final rows = await db.repositories.patient.update(entity);
|
|
|
+ return rows > 0 ? code : "";
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@override
|
|
@@ -35,16 +51,56 @@ class PatientServiceMock extends VitalPatientService {
|
|
|
}
|
|
|
|
|
|
@override
|
|
|
- Future<PatientDTO> getPatientDetailAsync(GetPatientRequest request) {
|
|
|
- // TODO: implement getPatientDetailAsync
|
|
|
- return super.getPatientDetailAsync(request);
|
|
|
+ Future<PatientDTO> getPatientDetailAsync(GetPatientRequest request) async {
|
|
|
+ final code = request.code!;
|
|
|
+ final entity = await db.repositories.patient.singleByCode(code);
|
|
|
+ if (entity == null || entity.dataJson.isEmpty) {
|
|
|
+ throw JsonRpcException(code: -1, message: "Offline patient not found");
|
|
|
+ }
|
|
|
+ final jsonMap = jsonDecode(entity.dataJson);
|
|
|
+ final dto = PatientDTO.fromJson(jsonMap);
|
|
|
+ return dto;
|
|
|
}
|
|
|
|
|
|
@override
|
|
|
Future<PageCollection<PatientDTO>> getPatientPageAsync(
|
|
|
- PatientPageRequest request) {
|
|
|
- // TODO: implement getPatientPageAsync
|
|
|
- return super.getPatientPageAsync(request);
|
|
|
+ PatientPageRequest request) async {
|
|
|
+ final query = db.repositories.patient.queryable.where((x) {
|
|
|
+ final List<IDbColumnCondition> arr = [];
|
|
|
+ arr.add(x.isValid.equals(true));
|
|
|
+ final keyword = request.keyword;
|
|
|
+ if (keyword != null && keyword.isNotEmpty) {
|
|
|
+ // TODO: 暂时只支持姓名模糊
|
|
|
+ arr.add(x.name.like("%$keyword%"));
|
|
|
+ } else {
|
|
|
+ if (request.startTime != null) {
|
|
|
+ arr.add(x.createTime.gte(request.startTime));
|
|
|
+ }
|
|
|
+ if (request.endTime != null) {
|
|
|
+ arr.add(x.createTime.lt(request.endTime));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return arr;
|
|
|
+ });
|
|
|
+
|
|
|
+ final count = await query.count();
|
|
|
+ final offset = request.pageSize * (request.pageIndex - 1);
|
|
|
+ final entities =
|
|
|
+ await query.offset(offset).limit(request.pageSize).toList();
|
|
|
+
|
|
|
+ final dtos = entities.map((e) {
|
|
|
+ final jsonMap = jsonDecode(e.dataJson);
|
|
|
+ final dto = PatientDTO.fromJson(jsonMap);
|
|
|
+ return dto;
|
|
|
+ }).toList();
|
|
|
+
|
|
|
+ final pagedList = PageCollection<PatientDTO>(
|
|
|
+ pageIndex: request.pageIndex,
|
|
|
+ pageSize: request.pageSize,
|
|
|
+ dataCount: count,
|
|
|
+ pageData: dtos,
|
|
|
+ );
|
|
|
+ return pagedList;
|
|
|
}
|
|
|
|
|
|
Future<PatientEntity?> _checkPatientExist(String code) async {
|
|
@@ -55,13 +111,13 @@ class PatientServiceMock extends VitalPatientService {
|
|
|
logger.e(
|
|
|
"PatientServiceMock - Check patient exist error. Code: $code.", e);
|
|
|
}
|
|
|
+ return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
abstract class _ModelConverter {
|
|
|
/// 根据新建请求创建DTO
|
|
|
- static PatientDTO create2Dto(CreatePatientRequest request) {
|
|
|
- final dto = PatientDTO();
|
|
|
+ static void syncCreate2Dto(PatientDTO dto, CreatePatientRequest request) {
|
|
|
dto.code = request.code;
|
|
|
dto.patientName = request.patientName;
|
|
|
dto.phone = request.phone;
|
|
@@ -75,7 +131,6 @@ abstract class _ModelConverter {
|
|
|
dto.permanentResidenceAddress = request.permanentResidenceAddress;
|
|
|
dto.teamRegionCode = request.teamRegionCode;
|
|
|
dto.contractedDoctor = request.contractedDoctor;
|
|
|
- return dto;
|
|
|
}
|
|
|
|
|
|
/// 根据DTO创建新建请求
|