import 'package:vital_local_database/core/index.dart'; import 'package:vitalapp/database/entities/defines.dart'; import 'package:vitalapp/database/entities/patient.dart'; import 'interfaces/patient.dart'; enum _FunctionCategory { exam, followUp, diagnosis, } class PatientRepository extends BaseDbRepository implements IPatientRepository { PatientRepository(super.database); @override PatientEntity createEntityInstance() => PatientEntity(); @override Future singleByCode( String code, String userCode, ) async { final entity = await queryable .where((x) => [ x.isValid.equals(true), x.code.equals(code), x.userCode.equals(userCode), //添加用户Code ]) .first(); return entity; } @override Future isNotUploadedPatient( String code, String userCode, ) async { final entity = await singleByCode(code, userCode); return entity != null && (entity.overallSyncState != OfflineDataSyncState.success || entity.syncState != OfflineDataSyncState.success); } @override Future increaseFollowUpCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.followUp, 1); @override Future increaseExamCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.exam, 1); @override Future increaseDiagnoissCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.diagnosis, 1); @override Future decreaseFollowUpCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.followUp, -1); @override Future decreaseExamCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.exam, -1); @override Future decreaseDiagnoissCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.diagnosis, -1); /// 根据分类更新离线数量 /// /// [num] 1 则加1,-1 则减1 Future _updateCountByCategory( String code, String userCode, _FunctionCategory category, int num, ) async { final entity = await singleByCode(code, userCode); if (entity == null) { return false; } switch (category) { case _FunctionCategory.exam: // TODO OFFLINE MELON : 待体检业务重新整理完成后实现 return true; case _FunctionCategory.followUp: entity.followUpCount += num; break; case _FunctionCategory.diagnosis: entity.diagnosisCount += num; break; } if (num > 0) { entity.overallSyncState = OfflineDataSyncState.wait; } final result = await update(entity); return result > 0; } }