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, gxyFollowUp, tnbFollowUp, diagnosis, tcmConsitution, } class PatientRepository extends BaseDbRepository implements IPatientRepository { PatientRepository(super.database); @override PatientEntity createEntityInstance() => PatientEntity(); @override Future singleByCode(String code) async { final entity = await queryable .where( (x) => [ x.isValid.equals(true), x.code.equals(code), ], ) .first(); return entity; } @override Future singleByCodeWithUserCode( 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 singleByCodeWithOrgCode( String code, String orgCode, ) async { final entity = await queryable .where((x) => [ x.isValid.equals(true), x.code.equals(code), x.orgCode.equals(orgCode), ]) .first(); return entity; } @override Future isNotUploadedPatient(String code, String userCode) async { final entity = await singleByCodeWithUserCode(code, userCode); return entity != null && (entity.overallSyncState != OfflineDataSyncState.success || entity.syncState != OfflineDataSyncState.success); } @override Future increaseGxyFollowUpCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.gxyFollowUp, 1); @override Future increaseTnbFollowUpCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.tnbFollowUp, 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 increaseTCMConsitutionCount(String code, String userCode) => _updateCountByCategory( code, userCode, _FunctionCategory.tcmConsitution, 1); @override Future decreaseGxyFollowUpCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.gxyFollowUp, -1); @override Future decreaseTnbFollowUpCount(String code, String userCode) => _updateCountByCategory(code, userCode, _FunctionCategory.tnbFollowUp, -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); @override Future decreaseTCMConsitutionCount(String code, String userCode) => _updateCountByCategory( code, userCode, _FunctionCategory.tcmConsitution, -1); /// 根据分类更新离线数量 /// /// [num] 1 则加1,-1 则减1 Future _updateCountByCategory( String code, String userCode, _FunctionCategory category, int num, ) async { final entity = await singleByCodeWithUserCode(code, userCode); if (entity == null) { return false; } switch (category) { case _FunctionCategory.exam: entity.examCount += num; break; case _FunctionCategory.tcmConsitution: entity.tcmConsitutionCount += num; break; case _FunctionCategory.gxyFollowUp: entity.gxyFollowUpCount += num; break; case _FunctionCategory.tnbFollowUp: entity.tnbFollowUpCount += num; break; case _FunctionCategory.diagnosis: entity.diagnosisCount += num; break; } if (num > 0) { entity.overallSyncState = OfflineDataSyncState.wait; } final result = await update(entity); return result > 0; } }