patient.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import 'package:vital_local_database/core/index.dart';
  2. import 'package:vitalapp/database/entities/defines.dart';
  3. import 'package:vitalapp/database/entities/patient.dart';
  4. import 'interfaces/patient.dart';
  5. enum _FunctionCategory {
  6. exam,
  7. followUp,
  8. diagnosis,
  9. }
  10. class PatientRepository
  11. extends BaseDbRepository<PatientEntity, PatientColumnsDefine>
  12. implements IPatientRepository {
  13. PatientRepository(super.database);
  14. @override
  15. PatientEntity createEntityInstance() => PatientEntity();
  16. @override
  17. Future<PatientEntity?> singleByCode(
  18. String code,
  19. String userCode,
  20. ) async {
  21. final entity = await queryable
  22. .where((x) => [
  23. x.isValid.equals(true),
  24. x.code.equals(code),
  25. x.userCode.equals(userCode), //添加用户Code
  26. ])
  27. .first();
  28. return entity;
  29. }
  30. @override
  31. Future<bool> isNotUploadedPatient(
  32. String code,
  33. String userCode,
  34. ) async {
  35. final entity = await singleByCode(code, userCode);
  36. return entity != null &&
  37. (entity.overallSyncState != OfflineDataSyncState.success ||
  38. entity.syncState != OfflineDataSyncState.success);
  39. }
  40. @override
  41. Future<bool> increaseFollowUpCount(String code, String userCode) =>
  42. _updateCountByCategory(code, userCode, _FunctionCategory.followUp, 1);
  43. @override
  44. Future<bool> increaseExamCount(String code, String userCode) =>
  45. _updateCountByCategory(code, userCode, _FunctionCategory.exam, 1);
  46. @override
  47. Future<bool> increaseDiagnoissCount(String code, String userCode) =>
  48. _updateCountByCategory(code, userCode, _FunctionCategory.diagnosis, 1);
  49. @override
  50. Future<bool> decreaseFollowUpCount(String code, String userCode) =>
  51. _updateCountByCategory(code, userCode, _FunctionCategory.followUp, -1);
  52. @override
  53. Future<bool> decreaseExamCount(String code, String userCode) =>
  54. _updateCountByCategory(code, userCode, _FunctionCategory.exam, -1);
  55. @override
  56. Future<bool> decreaseDiagnoissCount(String code, String userCode) =>
  57. _updateCountByCategory(code, userCode, _FunctionCategory.diagnosis, -1);
  58. /// 根据分类更新离线数量
  59. ///
  60. /// [num] 1 则加1,-1 则减1
  61. Future<bool> _updateCountByCategory(
  62. String code,
  63. String userCode,
  64. _FunctionCategory category,
  65. int num,
  66. ) async {
  67. final entity = await singleByCode(code, userCode);
  68. if (entity == null) {
  69. return false;
  70. }
  71. switch (category) {
  72. case _FunctionCategory.exam:
  73. // TODO OFFLINE MELON : 待体检业务重新整理完成后实现
  74. return true;
  75. case _FunctionCategory.followUp:
  76. entity.followUpCount += num;
  77. break;
  78. case _FunctionCategory.diagnosis:
  79. entity.diagnosisCount += num;
  80. break;
  81. }
  82. if (num > 0) {
  83. entity.overallSyncState = OfflineDataSyncState.wait;
  84. }
  85. final result = await update(entity);
  86. return result > 0;
  87. }
  88. }