exam.dart 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:uuid/uuid.dart';
  3. import 'package:vitalapp/database/db.dart';
  4. import 'package:vitalapp/database/entities/defines.dart';
  5. import 'package:vitalapp/database/entities/exam.dart';
  6. import 'package:vitalapp/database/entities/exam_batch.dart';
  7. import 'package:vitalapp/store/store.dart';
  8. class ExamServiceMock extends VitalExamService {
  9. ExamServiceMock(super.host);
  10. @override
  11. Future<String> createExamAsync(CreateExamRequest request) async {
  12. final checkBatch =
  13. await _checkBatch(request.batchNumber!, request.patientCode!);
  14. if (!checkBatch) {
  15. return "";
  16. }
  17. // 同步Server,新增&更新都走这个接口
  18. if (request.code != null && request.code!.isNotEmpty) {
  19. final updateResult = await _updateOfflineExamByCreateRequest(request);
  20. return updateResult ? request.code! : "";
  21. }
  22. final entity = ExamEntity();
  23. entity.isValid = true;
  24. entity.syncType = OfflineDataSyncType.create;
  25. // 本地先生成一个Code,上传后更新
  26. final uuid = const Uuid().v4().replaceAll('-', '');
  27. entity.code = "mock_$uuid";
  28. entity.userCode = Store.user.userCode!;
  29. entity.patientCode = request.patientCode!;
  30. entity.batchNumber = request.batchNumber!;
  31. entity.physicalEaxmNumber = request.physicalExamNumber!;
  32. entity.templateKey = request.key!;
  33. entity.templateCode = request.templateCode!;
  34. entity.dataJson = request.examData!;
  35. final id = await db.repositories.exam.insert(entity);
  36. return id > 0 ? entity.code : "";
  37. }
  38. /// 目前仅中医体质用
  39. @override
  40. Future<bool> updateExamAsync(UpdateExamRequest request) async {
  41. ExamEntity? entity = await db.repositories.exam.singleByCode(request.code!);
  42. if (entity == null) {
  43. // TODO: 此时拿不到批次号、体检号等信息,无法创建完整的离线数据,先直接返回失败
  44. return false;
  45. }
  46. entity.dataJson = request.examData!;
  47. final rows = await db.repositories.exam.update(entity);
  48. return rows > 0;
  49. }
  50. @override
  51. Future<bool> updateExamByBatchNumberAsync(
  52. UpdateExamByBatchNumberRequest request) async {
  53. final entity = await db.repositories.exam.queryable
  54. .where((x) => [
  55. x.isValid.equals(true),
  56. x.batchNumber.equals(request.batchNumber),
  57. x.batchNumber.equals(request.batchNumber),
  58. x.templateKey.equals(request.key),
  59. ])
  60. .first();
  61. if (entity == null) {
  62. // TODO: 此时拿不到批次号、体检号等信息,无法创建完整的离线数据,先直接返回失败
  63. return false;
  64. }
  65. entity.dataJson = request.examData!;
  66. final rows = await db.repositories.exam.update(entity);
  67. return rows > 0;
  68. }
  69. @override
  70. Future<List<ExamDTO>> getExamByBatchNumberAsync(
  71. GetExamByBatchNumberRequest request) async {
  72. final entities = await db.repositories.exam.queryable
  73. .where((x) => [
  74. x.isValid.equals(true),
  75. x.isValid.equals(request.batchNumber),
  76. ])
  77. .toList();
  78. List<ExamDTO> dtos = [];
  79. for (var entity in entities) {
  80. final dto = ExamDTO(
  81. code: entity.code,
  82. );
  83. dtos.add(dto);
  84. }
  85. return dtos;
  86. }
  87. @override
  88. Future<PageCollection<ExamConclusionDTO>> getPatientExamByPageAsync(
  89. GetPatientExamByPageRequest request) async {
  90. var query = db.repositories.exam.queryable.where((x) => [
  91. x.isValid.equals(true),
  92. ]);
  93. final count = await query.count();
  94. final result = PageCollection<ExamConclusionDTO>(
  95. currentPage: request.pageIndex,
  96. pageIndex: request.pageIndex,
  97. pageSize: request.pageSize,
  98. totalCount: count,
  99. dataCount: 0,
  100. pageData: [],
  101. );
  102. return super.getPatientExamByPageAsync(request);
  103. }
  104. @override
  105. Future<List<ExamRecordDTO>> getExamRecordListAsync(
  106. GetExamRecordListRequest request) async {
  107. final batchEntities = await db.repositories.examBatch
  108. .queryPatientAllList(request.patientCode!, Store.user.userCode!);
  109. if (batchEntities.isEmpty) {
  110. return [];
  111. }
  112. // TODO: implement getExamRecordListAsync
  113. return super.getExamRecordListAsync(request);
  114. }
  115. Future<bool> _updateOfflineExamByCreateRequest(
  116. CreateExamRequest request) async {
  117. ExamEntity entity;
  118. ExamEntity? history =
  119. await db.repositories.exam.singleByCode(request.code!);
  120. if (history == null) {
  121. entity = ExamEntity();
  122. entity.isValid = true;
  123. entity.syncType = OfflineDataSyncType.create;
  124. entity.code = request.code!;
  125. } else {
  126. entity = history;
  127. }
  128. int result;
  129. if (entity.id > 0) {
  130. result = await db.repositories.exam.update(entity);
  131. } else {
  132. result = await db.repositories.exam.insert(entity);
  133. }
  134. return result > 0;
  135. }
  136. Future<bool> _checkBatch(String batchNumber, String patientCode) async {
  137. final hisCount = await db.repositories.examBatch.queryable
  138. .where((x) => [
  139. x.isValid.equals(true),
  140. x.batchNumber.equals(batchNumber),
  141. x.patientCode.equals(patientCode),
  142. ])
  143. .count();
  144. if (hisCount > 0) {
  145. // 已存在。不重复创建
  146. return true;
  147. }
  148. final entity = ExamBatchEntity();
  149. entity.isValid = true;
  150. entity.batchNumber = batchNumber;
  151. entity.patientCode = patientCode;
  152. entity.userCode = Store.user.userCode!;
  153. entity.syncType = OfflineDataSyncType.create;
  154. final batchId = await db.repositories.examBatch.insert(entity);
  155. return batchId > 0;
  156. }
  157. }