|
@@ -1,4 +1,5 @@
|
|
|
import 'dart:convert';
|
|
|
+import 'dart:math';
|
|
|
|
|
|
import 'package:fis_jsonrpc/rpc.dart';
|
|
|
import 'package:get/get.dart';
|
|
@@ -8,6 +9,8 @@ import 'package:vitalapp/architecture/storage/text_storage.dart';
|
|
|
import 'package:vitalapp/database/db.dart';
|
|
|
import 'package:vitalapp/database/entities/defines.dart';
|
|
|
import 'package:vitalapp/database/entities/diagnosis.dart';
|
|
|
+import 'package:vitalapp/database/entities/exam.dart';
|
|
|
+import 'package:vitalapp/database/entities/exam_batch.dart';
|
|
|
import 'package:vitalapp/database/entities/followup.dart';
|
|
|
import 'package:vitalapp/database/entities/patient.dart';
|
|
|
import 'package:vitalapp/managers/adapters/offline/patient.dart';
|
|
@@ -147,6 +150,16 @@ class DataSyncManager implements IDataSyncManager {
|
|
|
final followUpSyncCount = await syncPatientFollowUp(patientCode);
|
|
|
patientEntity.followUpCount -= followUpSyncCount;
|
|
|
}
|
|
|
+
|
|
|
+ if (patientEntity.examCount > 0) {
|
|
|
+ final count = await syncPatientFollowUp(patientCode);
|
|
|
+ patientEntity.followUpCount -= count;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (patientEntity.tcmConsitutionCount > 0) {
|
|
|
+ final count = await syncPatientFollowUp(patientCode);
|
|
|
+ patientEntity.tcmConsitutionCount -= count;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
isSyncCompleted = _checkPatientSyncCompleted(patientEntity);
|
|
@@ -264,6 +277,49 @@ class DataSyncManager implements IDataSyncManager {
|
|
|
return count;
|
|
|
}
|
|
|
|
|
|
+ @override
|
|
|
+ Future<int> syncPatientExam(String patientCode) async {
|
|
|
+ logger.i("DataSyncManager start sync exam...");
|
|
|
+ final list = await db.repositories.followUp
|
|
|
+ .queryAllListByPatient(patientCode, userCode);
|
|
|
+ logger.i("DataSyncManager exam total count: ${list.length}.");
|
|
|
+ int count = 0;
|
|
|
+ try {
|
|
|
+ for (var entity in list) {
|
|
|
+ final success = await _syncSingleFollowUp(entity);
|
|
|
+ if (success) {
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ logger.e("DataSyncManager sync exam error.", e);
|
|
|
+ }
|
|
|
+ logger.i("DataSyncManager stop sync exam; uploaded count: $count.");
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<int> syncPatientTCMConsitution(String patientCode) async {
|
|
|
+ logger.i("DataSyncManager start sync TCMConsitution...");
|
|
|
+ final list = await db.repositories.followUp
|
|
|
+ .queryAllListByPatient(patientCode, userCode);
|
|
|
+ logger.i("DataSyncManager TCMConsitution total count: ${list.length}.");
|
|
|
+ int count = 0;
|
|
|
+ try {
|
|
|
+ for (var entity in list) {
|
|
|
+ final success = await _syncSingleFollowUp(entity);
|
|
|
+ if (success) {
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ logger.e("DataSyncManager sync TCMConsitution error.", e);
|
|
|
+ }
|
|
|
+ logger
|
|
|
+ .i("DataSyncManager stop sync TCMConsitution; uploaded count: $count.");
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
@override
|
|
|
Future<PagedDataCollection<OfflineRecordModel>> getOfflinePagedList(
|
|
|
int pageIndex, {
|
|
@@ -455,6 +511,50 @@ class DataSyncManager implements IDataSyncManager {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ Future<bool> _syncSingleExam(
|
|
|
+ ExamEntity entity, ExamBatchEntity batchEntity) async {
|
|
|
+ bool result = false;
|
|
|
+ try {
|
|
|
+ if (entity.syncType == OfflineDataSyncType.create) {
|
|
|
+ // TCM KEY: HEITCMC
|
|
|
+ final request = CreateExamRequest(
|
|
|
+ // code: entity.code,
|
|
|
+ batchNumber: entity.batchNumber,
|
|
|
+ key: entity.templateKey,
|
|
|
+ patientCode: entity.patientCode,
|
|
|
+ examData: entity.dataJson,
|
|
|
+ templateCode: entity.templateCode,
|
|
|
+ physicalExamNumber: "",
|
|
|
+ token: Store.user.token,
|
|
|
+ );
|
|
|
+ final code = await rpc.vitalExam.createExamAsync(request);
|
|
|
+ result = code.isNotEmpty;
|
|
|
+ if (result) {
|
|
|
+ entity.code = code; // 更新真实Code
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ final request = UpdateExamRequest(
|
|
|
+ token: Store.user.token,
|
|
|
+ key: entity.templateKey,
|
|
|
+ examData: entity.dataJson,
|
|
|
+ code: entity.code,
|
|
|
+ );
|
|
|
+ result = await rpc.vitalExam.updateExamAsync(request);
|
|
|
+ }
|
|
|
+ if (result) {
|
|
|
+ entity.syncState = OfflineDataSyncState.success;
|
|
|
+ } else {
|
|
|
+ entity.syncState = OfflineDataSyncState.fail;
|
|
|
+ }
|
|
|
+ final updateRows = await db.repositories.exam.update(entity);
|
|
|
+ result = updateRows > 0;
|
|
|
+ } catch (e) {
|
|
|
+ logger.e(
|
|
|
+ "DataSyncManager_syncSingleFollowUp error. id: ${entity.id}.", e);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
Future<bool> _syncPatientExt(PatientEntity entity) async {
|
|
|
if (entity.extJson == null || entity.extJson!.isEmpty) {
|
|
|
return true;
|