ConsultationService.dart 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. import 'dart:convert';
  2. import 'package:colorize_logger/colorize_logger.dart';
  3. import 'package:get_it/get_it.dart';
  4. import 'package:http/http.dart' as http;
  5. import 'package:ustest/ConsultationList.dart';
  6. import 'dart:typed_data';
  7. import 'AppSettings.dart';
  8. import 'UserService.dart';
  9. import 'package:intl/intl.dart';
  10. class ConsultationService {
  11. Future<AppConsultationDataModel> LoadDataAsync() async {
  12. var userService = GetIt.instance.get<UserService>();
  13. final user = await userService.getCurrentUser();
  14. final token = user?.accessToken;
  15. final orgCode = user?.organizationCode;
  16. var client = http.Client();
  17. var body =
  18. '{"jsonrpc": "2.0", "method": "GetPersonDeviceDropdownListAsync", "params": [{"Token": "$token"}], "id": 1 }';
  19. Logger.info('QueryExam http.Client()' + body);
  20. var response = await client
  21. .post(Uri.parse(AppSettings.host + '/IDeviceService'), body: body);
  22. var parsed = decodeResponseBody(
  23. 'GetPersonDeviceDropdownListAsync', response.bodyBytes);
  24. var datas = parsed['result'];
  25. final devices = datas.map<Device>((json) => Device.fromJson(json)).toList();
  26. body =
  27. '{"jsonrpc": "2.0", "method": "FindOrganizationExpertsAsync", "params": [{"Token": "$token", "OrganizationCode": "$orgCode"}], "id": 1 }';
  28. Logger.info('QueryExam http.Client()' + body);
  29. response = await client.post(
  30. Uri.parse(AppSettings.host + '/ILiveConsultationService'),
  31. body: body);
  32. //final response = await post(client, "ILiveConsultationService",
  33. // "FindOrganizationExpertsAsync", args);
  34. Logger.info('FindOrganizationExpertsAsync response.body' + response.body);
  35. parsed = jsonDecode(response.body);
  36. datas = parsed['result'];
  37. final experts = datas.map<Expert>((json) => Expert.fromJson(json)).toList()
  38. as List<Expert>;
  39. body =
  40. '{"jsonrpc": "2.0", "method": "FindScanPositionsAsync", "params": [{"Token": "$token"}], "id": 1 }';
  41. Logger.info('FindScanPositionsAsync http.Client()' + body);
  42. response = await client.post(
  43. Uri.parse(AppSettings.host + '/ILiveConsultationService'),
  44. body: body);
  45. parsed = decodeResponseBody('FindScanPositionsAsync', response.bodyBytes);
  46. //var data = jsonDecode(parsed['result']);
  47. var organSource = parsed['result'];
  48. var organs = organSource.map<String>((json) => json.toString()).toList()
  49. as List<String>;
  50. body =
  51. '{"jsonrpc": "2.0", "method": "GetUserListAsync", "params": [{"Token": "$token", "OrganizationCode": "$orgCode","OrganizationQueryType":3,"ExceptSelf":true}], "id": 1 }';
  52. Logger.info('GetUserListAsync http.Client()' + body);
  53. response = await client.post(Uri.parse(AppSettings.host + '/IUserService'),
  54. body: body);
  55. Logger.info('GetUserListAsync response.body' + response.body);
  56. parsed = jsonDecode(response.body);
  57. datas = parsed['result'];
  58. final users = datas.map<Expert>((json) => Expert.fromJson(json)).toList()
  59. as List<Expert>;
  60. var model = new AppConsultationDataModel(experts, devices, organs, users);
  61. return model;
  62. }
  63. decodeResponseBody(String logTag, Uint8List bodyBytes) {
  64. var utfString = utf8.decode(bodyBytes);
  65. Logger.info('$logTag response.body' + utfString);
  66. final parsed = jsonDecode(utfString);
  67. return parsed;
  68. }
  69. Future<List<Consultation>> FindConsultationsByPageAsync(
  70. String id, int? selectedType) async {
  71. try {
  72. var userService = GetIt.instance.get<UserService>();
  73. var user = await userService.getCurrentUser();
  74. if (user == null) {
  75. return List.empty();
  76. }
  77. var token = user?.accessToken;
  78. var client = http.Client();
  79. var body =
  80. '{"jsonrpc": "2.0", "method": "FindConsultationsByPageAsync", "params": [{"Token": "$token", "PageIndex": 1, "PageSize": 10,"ConsultationQueryType": $selectedType}], "id": 1 }';
  81. Logger.info('GetRecordInfoPagesAsync http.Client()' + body);
  82. final response = await client.post(
  83. Uri.parse(AppSettings.host + '/ILiveConsultationService'),
  84. body: body);
  85. Logger.info('FindConsultationsByPageAsync response.body' + response.body);
  86. final parsed = jsonDecode(response.body);
  87. var datas = parsed['result']['PageData'];
  88. var list = datas
  89. .map<Consultation>((json) => Consultation.fromJson(json))
  90. .toList();
  91. return list;
  92. } catch (ex) {
  93. Logger.info('FindConsultationsByPageAsync.to ex' + ex.toString());
  94. }
  95. return List.empty();
  96. }
  97. Future<bool> ApplyConsultationAsync(
  98. String expertCode, String deviceCode, String organ, DateTime time) async {
  99. var userService = GetIt.instance.get<UserService>();
  100. var user = await userService.getCurrentUser();
  101. var token = user?.accessToken;
  102. var client = http.Client();
  103. var patientCode = "2D6DA689ECC54F52A17F20A05BDF5C27"; //TODO should from UI
  104. var organizationCode = "Organization_20221020115006aAjF6l";
  105. DateFormat inputFormat = DateFormat("yyyy-MM-ddTHH:mm:ss");
  106. var utcTime = inputFormat.format(time.toUtc()).toString();
  107. var body =
  108. '{"jsonrpc": "2.0", "method": "FindPatientByCodeAsync", "params": [{"Token": "$token", "Code":"$patientCode"}], "id": 1 }';
  109. Logger.info('FindPatientByCodeAsync http.Client()' + body);
  110. var response = await client
  111. .post(Uri.parse(AppSettings.host + '/IPatientService'), body: body);
  112. var parsed =
  113. decodeResponseBody('FindPatientByCodeAsync', response.bodyBytes);
  114. var data = parsed['result']['PatientData'];
  115. var list =
  116. data.map<DataItemDTO>((json) => DataItemDTO.fromJson(json)).toList();
  117. var patientDatas = jsonEncode(list);
  118. body =
  119. '{"jsonrpc": "2.0", "method": "ApplyConsultationAsync", "params": [{"Token": "$token","ApplyUserCode":"3C135B470E6448F6854974D46022F7FD", "PatientCode":"$patientCode", "ExpertOrganizationCode":"$organizationCode", "PatientDatas":$patientDatas, "ExpertUserCode": "$expertCode", "DeviceCode": "$deviceCode", "ScanPosition": "$organ", "ConsultationTime":"$utcTime"}], "id": 1 }';
  120. Logger.info('ApplyConsultationAsync http.Client()' + body);
  121. response = await client.post(
  122. Uri.parse(AppSettings.host + '/ILiveConsultationService'),
  123. body: body);
  124. parsed = decodeResponseBody('ApplyConsultationAsync', response.bodyBytes);
  125. return true;
  126. }
  127. Future<dynamic> InitiateLiveConsultationAsync(String consultationCode) async {
  128. var userService = GetIt.instance.get<UserService>();
  129. var user = await userService.getCurrentUser();
  130. var token = user?.accessToken;
  131. var client = http.Client();
  132. var body =
  133. '{"jsonrpc": "2.0", "method": "InitiateLiveConsultationAsync", "params": [{"Token": "$token", "ConsultationCode":"$consultationCode"}], "id": 1 }';
  134. print('InitiateLiveConsultationAsync http.Client()' + body);
  135. final response = await client.post(
  136. Uri.parse(AppSettings.host + '/ILiveConsultationService'),
  137. body: body);
  138. var parsed =
  139. decodeResponseBody('InitiateLiveConsultationAsync', response.bodyBytes);
  140. var data = parsed['result'];
  141. return data;
  142. }
  143. Future<dynamic> CancelLiveConsultationAsync(String consultationCode) async {
  144. var userService = GetIt.instance.get<UserService>();
  145. var user = await userService.getCurrentUser();
  146. var token = user?.accessToken;
  147. var client = http.Client();
  148. var body =
  149. '{"jsonrpc": "2.0", "method": "CancelLiveConsultationAsync", "params": [{"Token": "$token", "ConsultationCode":"$consultationCode"}], "id": 1 }';
  150. print('CancelLiveConsultationAsync http.Client()' + body);
  151. final response = await client.post(
  152. Uri.parse(AppSettings.host + '/ILiveConsultationService'),
  153. body: body);
  154. var parsed =
  155. decodeResponseBody('CancelLiveConsultationAsync', response.bodyBytes);
  156. var data = parsed['result'];
  157. return data;
  158. }
  159. Future<dynamic> AcceptLiveConsultationAsync(String consultationCode) async {
  160. var userService = GetIt.instance.get<UserService>();
  161. var user = await userService.getCurrentUser();
  162. var token = user?.accessToken;
  163. var client = http.Client();
  164. var body =
  165. '{"jsonrpc": "2.0", "method": "AcceptLiveConsultationAsync", "params": [{"Token": "$token", "ConsultationCode":"$consultationCode"}], "id": 1 }';
  166. Logger.info('AcceptLiveConsultationAsync http.Client()' + body);
  167. final response = await client.post(
  168. Uri.parse(AppSettings.host + '/ILiveConsultationService'),
  169. body: body);
  170. var parsed =
  171. decodeResponseBody('AcceptLiveConsultationAsync', response.bodyBytes);
  172. var data = parsed['result'];
  173. return data;
  174. }
  175. Future<dynamic> RejectLiveConsultationAsync(String consultationCode) async {
  176. var userService = GetIt.instance.get<UserService>();
  177. var user = await userService.getCurrentUser();
  178. var token = user?.accessToken;
  179. var client = http.Client();
  180. var body =
  181. '{"jsonrpc": "2.0", "method": "RejectLiveConsultationAsync", "params": [{"Token": "$token", "ConsultationCode":"$consultationCode"}], "id": 1 }';
  182. Logger.info('RejectLiveConsultationAsync http.Client()' + body);
  183. final response = await client.post(
  184. Uri.parse(AppSettings.host + '/ILiveConsultationService'),
  185. body: body);
  186. var parsed =
  187. decodeResponseBody('RejectLiveConsultationAsync', response.bodyBytes);
  188. var data = parsed['result'];
  189. return data;
  190. }
  191. Future<bool> ApprovalConsultationAsync(
  192. ApprovalConsultationRequest model) async {
  193. String consultationCode = model.consultationCode;
  194. String expertUserCode = model.expertUserCode;
  195. DateTime consultationTime = model.consultationTime;
  196. List<String> consultationMemberCodes = <String>[];
  197. model.consultationMemberCodes.forEach((element) {
  198. consultationMemberCodes.add('"' + element + '"');
  199. });
  200. var userService = GetIt.instance.get<UserService>();
  201. var user = await userService.getCurrentUser();
  202. var token = user?.accessToken;
  203. var client = http.Client();
  204. DateFormat inputFormat = DateFormat("yyyy-MM-ddTHH:mm:ss");
  205. var utcTime = inputFormat.format(consultationTime.toUtc()).toString();
  206. var utcEndTime = inputFormat
  207. .format(consultationTime.add(const Duration(hours: 2)).toUtc())
  208. .toString();
  209. var body =
  210. '{"jsonrpc": "2.0", "method": "ApprovalConsultationAsync", "params": [{"Token": "$token","ConsultationCode":"$consultationCode", "ExpertUserCode":"$expertUserCode", "ConsultationTime":"$utcTime", "ConsultationTimeEnd":"$utcEndTime","ConsultationMemberCodes":$consultationMemberCodes }], "id": 1 }';
  211. Logger.info('ApprovalConsultationAsync http.Client()' + body);
  212. var response = await client.post(
  213. Uri.parse(AppSettings.host + '/ILiveConsultationService'),
  214. body: body);
  215. var parsed =
  216. decodeResponseBody('ApprovalConsultationAsync', response.bodyBytes);
  217. var data = parsed['result'];
  218. return data;
  219. }
  220. }
  221. class AppConsultationDataModel {
  222. final List<Expert> experts;
  223. final List<Device> devices;
  224. final List<String> organs;
  225. final List<Expert> users;
  226. AppConsultationDataModel(this.experts, this.devices, this.organs, this.users);
  227. }
  228. class TokenRequest {
  229. String token;
  230. TokenRequest(this.token);
  231. }
  232. class DataItemDTO {
  233. final String key;
  234. final String value;
  235. DataItemDTO({required this.key, required this.value});
  236. factory DataItemDTO.fromJson(Map<String, dynamic> json) {
  237. return DataItemDTO(
  238. key: json['Key'] as String,
  239. value: json['Value'] as String,
  240. );
  241. }
  242. Map<String, dynamic> toJson() => {
  243. "Key": key,
  244. "Value": value,
  245. };
  246. }
  247. class ApplyConsultationRequest extends TokenRequest {
  248. String expertUserCode;
  249. String deviceCode;
  250. String scanPosition;
  251. DateTime consultationTime;
  252. List<DataItemDTO> patientDatas;
  253. String patientCode;
  254. ApplyConsultationRequest(
  255. this.expertUserCode,
  256. this.deviceCode,
  257. this.scanPosition,
  258. this.consultationTime,
  259. this.patientDatas,
  260. this.patientCode,
  261. String token)
  262. : super(token);
  263. }
  264. class Expert {
  265. final String code;
  266. final String userName;
  267. Expert({required this.code, required this.userName});
  268. @override
  269. bool operator ==(Object other) => other is Expert && other.code == code;
  270. factory Expert.fromJson(Map<String, dynamic> json) {
  271. return Expert(
  272. code: json['UserCode'] as String,
  273. userName: json['UserName'] as String,
  274. );
  275. }
  276. Map<String, dynamic> toJson() => {
  277. "UserCode": code,
  278. "UserName": userName,
  279. };
  280. }
  281. class Device {
  282. final String code;
  283. final String deviceName;
  284. Device({required this.code, required this.deviceName});
  285. bool operator ==(Object other) => other is Device && other.code == code;
  286. factory Device.fromJson(Map<String, dynamic> json) {
  287. return Device(
  288. code: json['Key'] as String,
  289. deviceName: json['Value'] as String,
  290. );
  291. }
  292. Map<String, dynamic> toJson() => {
  293. "Key": code,
  294. "Value": deviceName,
  295. };
  296. }
  297. class Organ {
  298. final String code;
  299. final String orgName;
  300. Organ({required this.code, required this.orgName});
  301. factory Organ.fromJson(Map<String, dynamic> json) {
  302. return Organ(
  303. code: json['Key'] as String,
  304. orgName: json['Value'] as String,
  305. );
  306. }
  307. Map<String, dynamic> toJson() => {
  308. "Key": code,
  309. "Value": orgName,
  310. };
  311. }
  312. class ApprovalConsultationRequest extends TokenRequest {
  313. String consultationCode;
  314. String expertUserCode;
  315. DateTime consultationTime;
  316. List<String> consultationMemberCodes;
  317. ApprovalConsultationRequest(this.consultationCode, this.expertUserCode,
  318. this.consultationTime, this.consultationMemberCodes, String token)
  319. : super(token);
  320. @override
  321. String toString() {
  322. // TODO: implement toString
  323. return 'consultationCode: $consultationCode,expertUserCode:$expertUserCode,consultationTime:$consultationTime,consultationMemberCodes:$consultationMemberCodes';
  324. }
  325. }