template.dart 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. import 'dart:convert';
  2. import 'package:fis_common/index.dart';
  3. import 'package:fis_jsonrpc/rpc.dart';
  4. import 'package:flutter/foundation.dart';
  5. import 'package:flutter/services.dart';
  6. import 'package:vitalapp/architecture/storage/file_storage_native_and_web.dart';
  7. import 'package:vitalapp/architecture/storage/text_storage.dart';
  8. import 'package:vitalapp/managers/interfaces/template.dart';
  9. import 'package:vitalapp/rpc.dart';
  10. import 'package:vitalapp/store/store.dart';
  11. import 'package:fis_common/logger/logger.dart';
  12. class TemplateManager implements ITemplateManager {
  13. /// 获取系统模板设置
  14. @override
  15. Future<SyncSettingsDTO?> syncSetting(SyncSettingRequest request) async {
  16. try {
  17. request.token = Store.user.token;
  18. final result = await rpc.vitalSystemSetting.syncSettingAsync(request);
  19. return result;
  20. } catch (e) {
  21. logger.e("TemplateManager query patient paged list error.", e);
  22. return null;
  23. }
  24. }
  25. @override
  26. Future<TemplateDTO?> getTemplateDetail(GetTemplateRequest request) async {
  27. try {
  28. request.token = Store.user.token;
  29. final result = await rpc.vitalTemplate.getTemplateDetailAsync(request);
  30. return result;
  31. } catch (e) {
  32. logger.e("TemplateManager query patient paged list error.", e);
  33. return null;
  34. }
  35. }
  36. @override
  37. Future<bool?> saveTemplate() async {
  38. try {
  39. if (FPlatform.current == FPlatformEnum.android) {
  40. ///下载模版之前删除旧模版,保证每次下载的都是新模版
  41. FileStorageNativeAndWeb templateDel =
  42. FileStorageNativeAndWeb.createInstance("template");
  43. var isDeleteSuccess = await templateDel.deleteDirectory("template");
  44. logger.i(
  45. "TemplateManager saveTemplate is delete template success:${isDeleteSuccess}.");
  46. }
  47. SyncSettingRequest syncSettingRequest = SyncSettingRequest();
  48. var syncSettingsDTO = await syncSetting(syncSettingRequest);
  49. logger.i(
  50. "TemplateManager saveTemplate template count:${syncSettingsDTO?.templates?.length}.");
  51. for (TemplateDTO i in syncSettingsDTO?.templates ?? []) {
  52. TemplateDTO? templateDTO = await getTemplateDetail(
  53. GetTemplateRequest(
  54. code: i.code!,
  55. ),
  56. );
  57. TextStorage template = TextStorage(
  58. fileName: i.code!,
  59. directory: "template/${i.code!}",
  60. );
  61. await template.save(jsonEncode(templateDTO!.toJson()));
  62. logger.i(
  63. "TemplateManager saveTemplate template Code:${i.code} , key:${i.key}.");
  64. }
  65. ///Excel生化模板
  66. if (syncSettingsDTO?.biochemicalTemplate?.code.isNotNullOrEmpty ??
  67. false) {
  68. var code = syncSettingsDTO!.biochemicalTemplate!.code!;
  69. TextStorage template = TextStorage(
  70. fileName: code,
  71. directory: "template/$code",
  72. );
  73. var key = syncSettingsDTO.biochemicalTemplate!.key!;
  74. await template.save(jsonEncode(syncSettingsDTO.biochemicalTemplate));
  75. logger
  76. .i("TemplateManager saveTemplate template Code:$code , key:$key.");
  77. }
  78. ///Excel血常规模板
  79. if (syncSettingsDTO?.bloodRoutineTemplate?.code.isNotNullOrEmpty ??
  80. false) {
  81. var code = syncSettingsDTO!.bloodRoutineTemplate!.code!;
  82. TextStorage template = TextStorage(
  83. fileName: code,
  84. directory: "template/$code",
  85. );
  86. var key = syncSettingsDTO.bloodRoutineTemplate!.key!;
  87. await template.save(jsonEncode(syncSettingsDTO.bloodRoutineTemplate));
  88. logger
  89. .i("TemplateManager saveTemplate template Code:$code , key:$key.");
  90. }
  91. return true;
  92. } catch (e) {
  93. logger.e("TemplateManager saveTemplate error.", e);
  94. return null;
  95. }
  96. }
  97. Future<bool?> saveTemplateRelation() async {
  98. try {
  99. Map<String, String> currentTemplateIndex = {};
  100. SyncSettingRequest syncSettingRequest = SyncSettingRequest();
  101. var syncSettingsDTO = await syncSetting(syncSettingRequest);
  102. logger.i(
  103. "TemplateManager saveTemplate template count:${syncSettingsDTO?.templates?.length}.");
  104. for (TemplateDTO i in syncSettingsDTO?.templates ?? []) {
  105. currentTemplateIndex[i.key!] = i.code!;
  106. logger.i(
  107. "TemplateManager saveTemplate template Code:${i.code} , key:${i.key}.");
  108. }
  109. ///Excel生化模板
  110. if (syncSettingsDTO?.biochemicalTemplate?.code.isNotNullOrEmpty ??
  111. false) {
  112. var code = syncSettingsDTO!.biochemicalTemplate!.code!;
  113. var key = syncSettingsDTO.biochemicalTemplate!.key!;
  114. currentTemplateIndex[key] = code;
  115. Store.user.biochemicalTemplateKey = key;
  116. logger
  117. .i("TemplateManager saveTemplate template Code:$code , key:$key.");
  118. }
  119. ///Excel血常规模板
  120. if (syncSettingsDTO?.bloodRoutineTemplate?.code.isNotNullOrEmpty ??
  121. false) {
  122. var code = syncSettingsDTO!.bloodRoutineTemplate!.code!;
  123. var key = syncSettingsDTO.bloodRoutineTemplate!.key!;
  124. currentTemplateIndex[key] = code;
  125. Store.user.bloodRoutineTemplateKey = key;
  126. logger
  127. .i("TemplateManager saveTemplate template Code:$code , key:$key.");
  128. }
  129. /// 模板索引
  130. TextStorage templateRelation = TextStorage(
  131. fileName: "templateRelation",
  132. directory: "templateRelation",
  133. );
  134. await templateRelation.deleteDirectory();
  135. await templateRelation.save(jsonEncode(currentTemplateIndex));
  136. return true;
  137. } catch (e) {
  138. return null;
  139. }
  140. }
  141. @override
  142. Future<String?> readTemplateRelation(String fileName) async {
  143. try {
  144. TextStorage t =
  145. TextStorage(fileName: fileName, directory: "templateRelation");
  146. final str = await t.read();
  147. return str;
  148. } catch (e) {
  149. logger.e("TemplateManager readTemplate error.", e);
  150. return null;
  151. }
  152. }
  153. @override
  154. Future<String> getTemplateByKey(String key) async {
  155. logger.i("TemplateManager getTemplateByKey:$key");
  156. var templates = await readTemplateRelation('templateRelation');
  157. String template = '';
  158. if (templates != null) {
  159. var templateRelation = jsonDecode(templates);
  160. var templateCode = templateRelation[key] ?? '';
  161. template = await readTemplate(templateCode) ?? '';
  162. }
  163. String templateContent = '';
  164. logger.i(
  165. "TemplateManager getTemplateByKey $key template.isEmpty :${template.isEmpty}");
  166. if (template.isEmpty) {
  167. var json = await loadJsonFromAssets(
  168. 'assets/templates/PrescriptionTemplates/${key}.json');
  169. templateContent = jsonEncode(jsonDecode(json)["Content"]);
  170. } else {
  171. templateContent =
  172. TemplateDTO.fromJson(jsonDecode(template)).templateContent!;
  173. }
  174. return templateContent;
  175. }
  176. Future<String> loadJsonFromAssets(String filePath) async {
  177. try {
  178. String jsonString = await rootBundle.loadString(filePath);
  179. return jsonString;
  180. } catch (e) {
  181. return "";
  182. }
  183. }
  184. @override
  185. Future<String?> readTemplate(String fileName) async {
  186. try {
  187. TextStorage t =
  188. TextStorage(fileName: fileName, directory: "template/$fileName");
  189. final str = await t.read();
  190. return str;
  191. } catch (e) {
  192. logger.e("TemplateManager readTemplate error.", e);
  193. return null;
  194. }
  195. }
  196. }