ContractRecordDBService.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. using MongoDB.Driver;
  2. using VitalService.Entities;
  3. using VitalService.Request;
  4. using VitalService.Common;
  5. using WingServerCommon.Mapper;
  6. using WingInterfaceLibrary.Interface.DBVitalInterface;
  7. using WingInterfaceLibrary.Request.DBVitalRequest;
  8. using WingInterfaceLibrary.DTO.Vital;
  9. using WingInterfaceLibrary.Request;
  10. using WingInterfaceLibrary.Enum.VitalEnum;
  11. using WingServerCommon.Log;
  12. namespace VitalService.Service
  13. {
  14. /// <summary>
  15. /// 合约记录数据服务
  16. /// </summary>
  17. public partial class VitalDatabaseService : IVitalContractRecordDBService
  18. {
  19. private FindOptions<ContractRecordEntity> listProjection = new FindOptions<ContractRecordEntity>
  20. {
  21. Projection = Builders<ContractRecordEntity>.Projection
  22. .Exclude(f => f.ContractedFileUrl)
  23. .Exclude(f => f.Photos)
  24. };
  25. /// <summary>
  26. /// 创建合约记录数据
  27. /// </summary>
  28. /// <param name="request">创建请求</param>
  29. /// <returns></returns>
  30. public async Task<string> CreateContractRecordAsync(CreateContractRecordDBRequest request)
  31. {
  32. AddDoctorCode(request.OperationDoctor);
  33. if (string.IsNullOrWhiteSpace(request.ContractRecordNo))
  34. {
  35. request.ContractRecordNo = NumberGenerator.GenerateNumber();
  36. }
  37. var entity = request.MappingTo<ContractRecordEntity>();
  38. var info = await SetRequestCreatedFrom(entity, request.OperationDoctor);
  39. if (info.team != null)
  40. {
  41. entity.ContractedTeam = info.team.Code;
  42. if (string.IsNullOrWhiteSpace(entity.ContractedDoctor) && !string.IsNullOrWhiteSpace(info.team.Principal))
  43. {
  44. entity.ContractedDoctor = info.team.Principal;
  45. }
  46. }
  47. var contactRecordCode = await _contractRecordDBRepository.InsertOneAsync(entity);
  48. await UpdatePatientContactStateAsync(entity.ContractedPatient);
  49. return contactRecordCode;
  50. }
  51. private async Task UpdatePatientContactStateAsync(string cardNo)
  52. {
  53. try
  54. {
  55. var contractRecordFilter = Builders<ContractRecordEntity>.Filter.Where(x => x.IsDelete == false && x.ContractedPatient == cardNo);
  56. var contractRecordList = await _contractRecordDBRepository.FindAllAsync(contractRecordFilter);
  57. if (contractRecordList?.Any() ?? false)
  58. {
  59. var contractEntity = contractRecordList.OrderByDescending(x => x.CreateTime).FirstOrDefault();
  60. var patientFilter = Builders<PatientEntity>.Filter.Eq(p => p.Code, cardNo);
  61. var patientEntity = await _patientDBRepository.FindOneAsync(patientFilter);
  62. if (patientEntity != null)
  63. {
  64. var patientUpdates = Builders<PatientEntity>.Update.Set(f => f.ContractState, contractEntity.ContractState);
  65. if (contractEntity.ContractState == ContractStateEnum.Signed)
  66. {
  67. patientUpdates = patientUpdates.Set(f => f.ServiceStartDate, contractEntity.ServiceStartDate)
  68. .Set(f => f.ServiceEndDate, contractEntity.ServiceEndDate);
  69. }
  70. await _patientDBRepository.UpdateOneAsync(patientFilter, patientUpdates, false);
  71. }
  72. }
  73. }
  74. catch (Exception ex)
  75. {
  76. Logger.WriteLineWarn($"ContractRecordDBService UpdatePatientContactStateAsync error, ex:{ex}");
  77. }
  78. }
  79. /// <summary>
  80. /// 根据编码获取合约记录数据
  81. /// </summary>
  82. /// <param name="request">获取请求</param>
  83. /// <returns></returns>
  84. public async Task<ContractRecordDTO> GetContractRecordDetailAsync(GetContractRecordDBRequest request)
  85. {
  86. var filter = Builders<ContractRecordEntity>.Filter.Eq(x => x.Code, request.Code);
  87. filter = await AddPermissionFilter(filter, request.OperationDoctor);
  88. var result = await _contractRecordDBRepository.FindOneAsync(filter);
  89. return await ConvertToDTO(result, request.OperationDoctor);
  90. }
  91. /// <summary>
  92. /// 根据关键字段获取合约记录数据
  93. /// </summary>
  94. /// <param name="request">获取请求</param>
  95. /// <returns></returns>
  96. public async Task<ContractRecordDTO> GetContractRecordDetailByKeyAsync(GetContractRecordByKeyDBRequest request)
  97. {
  98. var filter = Builders<ContractRecordEntity>.Filter.Eq(request.Key, request.Value);
  99. filter = await AddPermissionFilter(filter, request.OperationDoctor);
  100. var result = await _contractRecordDBRepository.FindOneAsync(filter);
  101. return await ConvertToDTO(result, request.OperationDoctor);
  102. }
  103. /// <summary>
  104. /// 获取合约记录数据分页
  105. /// </summary>
  106. /// <param name="request">分页请求</param>
  107. /// <returns></returns>
  108. public async Task<PageCollection<ContractRecordDTO>> GetContractRecordPageAsync(DBPageRequest request)
  109. {
  110. var filter = await _contractRecordDBRepository.GetPageFilter(request);
  111. filter = await AddPermissionFilter(filter, request.OperationDoctor);
  112. var pageFilter = new DBPageRequest<ContractRecordEntity>
  113. {
  114. PageIndex = request.PageIndex,
  115. PageSize = request.PageSize,
  116. Filter = filter,
  117. Sort = Builders<ContractRecordEntity>.Sort.Descending(x => x.CreateTime)
  118. };
  119. var result = await _contractRecordDBRepository.GetPages(pageFilter, listProjection);
  120. return await ConvertToDTOPage(result, request.OperationDoctor);
  121. }
  122. /// <summary>
  123. /// 删除合约记录数据
  124. /// </summary>
  125. /// <param name="request">删除请求</param>
  126. /// <returns></returns>
  127. public async Task<bool> RemoveContractRecordAsync(RemoveContractRecordDBRequest request)
  128. {
  129. AddDoctorCode(request.OperationDoctor);
  130. return await _contractRecordDBRepository.DeleteOneAsync("Code", request.Code);
  131. }
  132. /// <summary>
  133. /// 删除多个合约记录数据
  134. /// </summary>
  135. /// <param name="request">删除请求</param>
  136. /// <returns></returns>
  137. public async Task<long> RemoveContractRecordListAsync(RemoveContractRecordListDBRequest request)
  138. {
  139. AddDoctorCode(request.OperationDoctor);
  140. var filter = new List<(string key, string val)>();
  141. foreach (var code in request.Codes)
  142. {
  143. filter.Add(("Code", code));
  144. }
  145. return await _contractRecordDBRepository.DeleteAllAsync(filter);
  146. }
  147. /// <summary>
  148. /// 获取合约记录数据列表
  149. /// </summary>
  150. /// <param name="request">列表请求</param>
  151. /// <returns></returns>
  152. public async Task<List<ContractRecordDTO>> GetContractRecordListAsync(GetContractRecordListDBRequest request)
  153. {
  154. var filter = Builders<ContractRecordEntity>.Filter.In(f => f.Code, request.Codes);
  155. filter = await AddPermissionFilter(filter, request.OperationDoctor);
  156. var result = await _contractRecordDBRepository.FindAllAsync(filter, listProjection);
  157. return await ConvertToDTOList(result, request.OperationDoctor);
  158. }
  159. /// <summary>
  160. /// 根据关键字段获取合约记录数据列表
  161. /// </summary>
  162. /// <param name="request">列表请求</param>
  163. /// <returns></returns>
  164. public async Task<List<ContractRecordDTO>> GetContractRecordListByKeyAsync(GetContractRecordListByKeyDBRequest request)
  165. {
  166. var filter = Builders<ContractRecordEntity>.Filter.Eq(request.Key, request.Value);
  167. filter = await AddPermissionFilter(filter, request.OperationDoctor);
  168. var result = await _contractRecordDBRepository.FindAllAsync(filter, listProjection);
  169. return await ConvertToDTOList(result, request.OperationDoctor);
  170. }
  171. /// <summary>
  172. /// 查询医生最近签约记录
  173. /// </summary>
  174. /// <param name="request">获取请求</param>
  175. /// <returns></returns>
  176. public async Task<ContractRecordDTO> GetDoctorContractRecordDBAsync(GetDoctorContractRecordDBRequest request)
  177. {
  178. var createdDoctor = request.CreatedDoctor;
  179. var filter = Builders<ContractRecordEntity>.Filter.Where(x => x.CreatedDoctor == createdDoctor && (x.ContractState == ContractStateEnum.Signed || x.ContractState == ContractStateEnum.Expired || x.ContractState == ContractStateEnum.Cancelled));
  180. var entities = await _contractRecordDBRepository.FindAllAsync(filter);
  181. var entity = entities?.OrderByDescending(x => x.CreateTime)?.FirstOrDefault();
  182. return await ConvertToDTO(entity, request.OperationDoctor);
  183. }
  184. /// <summary>
  185. /// 查询续签关联的签约记录
  186. /// </summary>
  187. /// <param name="request">获取请求</param>
  188. /// <returns></returns>
  189. public async Task<List<ContractRecordDTO>> GetRenewalContractDBAsync(GetRenewalContractDBRequest request)
  190. {
  191. var renewalContractCode = request.RenewalContractCode;
  192. var filter = Builders<ContractRecordEntity>.Filter.Where(x => x.RenewalContractCode == renewalContractCode);
  193. var entities = await _contractRecordDBRepository.FindAllAsync(filter);
  194. if (entities?.Any() ?? false)
  195. {
  196. return await ConvertToDTOList(entities, request.OperationDoctor);
  197. }
  198. return null;
  199. }
  200. /// <summary>
  201. /// 更新合约记录数据
  202. /// </summary>
  203. /// <param name="request">更新请求</param>
  204. /// <returns></returns>
  205. public async Task<bool> UpdateContractRecordAsync(UpdateContractRecordDBRequest request)
  206. {
  207. AddDoctorCode(request.OperationDoctor);
  208. var filter = Builders<ContractRecordEntity>.Filter.Eq(f => f.Code, request.Code);
  209. var updates = new List<UpdateDefinition<ContractRecordEntity>>();
  210. if (request.ContractRecordNo != "-1")
  211. {
  212. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ContractRecordNo, request.ContractRecordNo));
  213. }
  214. if (request.ContractState != null)
  215. {
  216. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ContractState, request.ContractState));
  217. }
  218. if (request.ContractIsValid != null)
  219. {
  220. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ContractIsValid, request.ContractIsValid));
  221. }
  222. if (request.ContractedDoctor != "-1")
  223. {
  224. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ContractIsValid, request.ContractIsValid));
  225. }
  226. if (request.ContractedPatient != "-1")
  227. {
  228. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ContractedPatient, request.ContractedPatient));
  229. }
  230. if (request.ContractedFileUrl != "-1")
  231. {
  232. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ContractedFileUrl, request.ContractedFileUrl));
  233. }
  234. if (request.ContractedFileUrl != "-1")
  235. {
  236. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ContractedFileUrl, request.ContractedFileUrl));
  237. }
  238. if (request.ContractedTime != null)
  239. {
  240. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ContractedTime, request.ContractedTime));
  241. }
  242. if (request.AuditState != null)
  243. {
  244. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.AuditState, request.AuditState));
  245. }
  246. if (request.ServicePacks != null)
  247. {
  248. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ServicePacks, request.ServicePacks));
  249. }
  250. if (request.ServiceStartDate != null)
  251. {
  252. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ServiceStartDate, request.ServiceStartDate));
  253. }
  254. if (request.ServiceEndDate != null)
  255. {
  256. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ServiceEndDate, request.ServiceEndDate));
  257. }
  258. if (request.Photos != null)
  259. {
  260. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.Photos, request.Photos));
  261. }
  262. if (request.Notes != "-1")
  263. {
  264. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.Notes, request.Notes));
  265. }
  266. var update = Builders<ContractRecordEntity>.Update.Combine(updates);
  267. var result = await _contractRecordDBRepository.UpdateOneAsync(filter, update) > 0;
  268. if (request.ContractState != null && result)
  269. {
  270. var contractFilter = Builders<ContractRecordEntity>.Filter.Eq(x => x.Code, request.Code);
  271. var contractEntity = await _contractRecordDBRepository.FindOneAsync(contractFilter);
  272. if (contractEntity != null && !string.IsNullOrWhiteSpace(contractEntity.ContractedPatient))
  273. {
  274. await UpdatePatientContactStateAsync(contractEntity.ContractedPatient);
  275. }
  276. }
  277. return result;
  278. }
  279. private async Task<ContractRecordDTO> ConvertToDTO(ContractRecordEntity entity, string operationDoctor)
  280. {
  281. if (entity == null) return null;
  282. var record = entity?.MappingTo<ContractRecordDTO>();
  283. if (!string.IsNullOrWhiteSpace(entity.ContractedDoctor))
  284. {
  285. var filter = Builders<UserEntity>.Filter.Eq(f => f.Code, entity.ContractedDoctor);
  286. var userInfo = await _userDBRepository.FindOneAsync(filter);
  287. record.ContractedDoctorCode = userInfo?.Code;
  288. record.ContractedDoctor = !string.IsNullOrWhiteSpace(userInfo?.RealName) ? userInfo?.RealName : userInfo?.UserName;
  289. if (!string.IsNullOrWhiteSpace(userInfo?.OrganizationCode))
  290. {
  291. var filterOrg = Builders<OrganizationEntity>.Filter.Eq(f => f.Code, userInfo.OrganizationCode);
  292. var orgInfo = await _organizationDBRepository.FindOneAsync(filterOrg);
  293. record.OrganizationName = orgInfo?.OrganizationName;
  294. }
  295. }
  296. if (!string.IsNullOrWhiteSpace(entity.ContractedTeam))
  297. {
  298. var filter = Builders<TeamEntity>.Filter.Eq(f => f.Code, entity.ContractedTeam);
  299. var teamInfo = await _teamDBRepository.FindOneAsync(filter);
  300. record.ContractedTeam = teamInfo?.TeamName;
  301. record.ContractedTeamCode = teamInfo?.Code;
  302. record.SupervisingPhysician = teamInfo?.Principal;
  303. }
  304. if (entity.ServicePacks != null && entity.ServicePacks.Count > 0)
  305. {
  306. var packRequest = new GetServicePackListDBRequest { Codes = entity.ServicePacks.ToList(), OperationDoctor = operationDoctor };
  307. record.ServicePacks = await GetServicePackListAsync(packRequest);
  308. }
  309. if (!string.IsNullOrWhiteSpace(entity.ContractedPatient))
  310. {
  311. var filter = Builders<PatientEntity>.Filter.Eq(f => f.Code, entity.ContractedPatient);
  312. var patientInfo = await _patientDBRepository.FindOneAsync(filter);
  313. var dto = await ConvertToDTO(patientInfo);
  314. if (dto != null)
  315. {
  316. record.PatientName = dto.PatientName;
  317. record.Birthday = dto.Birthday;
  318. record.CardNo = dto.CardNo;
  319. record.PatientGender = dto.PatientGender;
  320. record.PatientAddress = dto.PatientAddress;
  321. record.Nationality = dto.Nationality;
  322. record.Phone = dto.Phone;
  323. if (dto.CrowdLabels != null && dto.CrowdLabels.Count > 0)
  324. {
  325. record.CrowdLabels = dto.CrowdLabels;
  326. record.LabelNames = dto.LabelNames;
  327. }
  328. else
  329. {
  330. record.CrowdLabels = new List<string>();
  331. }
  332. }
  333. }
  334. return record;
  335. }
  336. private async Task<List<ContractRecordDTO>> ConvertToDTOList(List<ContractRecordEntity> entitys, string operationDoctor)
  337. {
  338. var userCodes = entitys.Select(f => f.ContractedDoctor).Distinct();
  339. var filterUsers = Builders<UserEntity>.Filter.In(f => f.Code, userCodes);
  340. var usersInfo = await _userDBRepository.FindAllAsync(filterUsers);
  341. var orgCodes = usersInfo.Select(u => u.OrganizationCode).Distinct();
  342. var filterOrgs = Builders<OrganizationEntity>.Filter.In(f => f.Code, orgCodes);
  343. var orgsInfo = await _organizationDBRepository.FindAllAsync(filterOrgs);
  344. var teamCodes = entitys.Select(f => f.ContractedTeam).Distinct();
  345. var filterTeams = Builders<TeamEntity>.Filter.In(f => f.Code, teamCodes);
  346. var teamsInfo = await _teamDBRepository.FindAllAsync(filterTeams);
  347. var packsCodes = entitys.SelectMany(f => f.ServicePacks ?? new List<string>()).Distinct();
  348. var filterPacks = new GetServicePackListDBRequest { Codes = packsCodes.ToList(), OperationDoctor = operationDoctor };
  349. var packsInfo = await GetServicePackListAsync(filterPacks);
  350. var patientCodes = entitys.Select(f => f.ContractedPatient).Distinct();
  351. var filterPatients = Builders<PatientEntity>.Filter.In(f => f.Code, patientCodes);
  352. var patientsInfo = await _patientDBRepository.FindAllAsync(filterPatients);
  353. var filterLabel = Builders<LabelEntity>.Filter.In(f => f.LabelTypeKey, new List<string> { "RQFL", "CJJB", "TSZG" });
  354. var labels = await _labelDBRepository.FindAllAsync(filterLabel);
  355. var resultList = new List<ContractRecordDTO>();
  356. foreach (var entity in entitys)
  357. {
  358. if (entity == null)
  359. {
  360. continue;
  361. }
  362. var record = entity.MappingTo<ContractRecordDTO>();
  363. record.ContractedFileUrl = " ";
  364. record.Photos = new List<string>();
  365. if (!string.IsNullOrWhiteSpace(entity.ContractedDoctor))
  366. {
  367. var userInfo = usersInfo.FirstOrDefault(w => w.Code == entity.ContractedDoctor);
  368. record.ContractedDoctor = userInfo?.Code;
  369. record.ContractedDoctor = !string.IsNullOrWhiteSpace(userInfo?.RealName) ? userInfo?.RealName : userInfo?.UserName;
  370. if (!string.IsNullOrWhiteSpace(userInfo.OrganizationCode))
  371. {
  372. var orgInfo = orgsInfo.FirstOrDefault(w => w.Code == userInfo.OrganizationCode);
  373. record.OrganizationName = orgInfo?.OrganizationName;
  374. }
  375. }
  376. if (!string.IsNullOrWhiteSpace(entity.ContractedTeam))
  377. {
  378. var teamInfo = teamsInfo.FirstOrDefault(w => w.Code == entity.ContractedTeam);
  379. record.ContractedTeam = teamInfo?.TeamName;
  380. record.ContractedTeamCode = teamInfo?.Code;
  381. record.SupervisingPhysician = teamInfo?.Principal;
  382. }
  383. if (entity.ServicePacks != null && entity.ServicePacks.Count > 0)
  384. {
  385. var packInfo = packsInfo.Where(w => entity.ServicePacks != null && entity.ServicePacks.Count > 0 && entity.ServicePacks.Contains(w.Code)).ToList();
  386. record.ServicePacks = packInfo;
  387. }
  388. if (!string.IsNullOrWhiteSpace(entity.ContractedPatient))
  389. {
  390. var patientInfo = patientsInfo.FirstOrDefault(w => w.Code == entity.ContractedPatient);
  391. if (patientInfo != null)
  392. {
  393. var dto = await ConvertToDTO(patientInfo);
  394. if (dto != null)
  395. {
  396. record.PatientName = dto.PatientName;
  397. record.Birthday = dto.Birthday;
  398. record.CardNo = dto.CardNo;
  399. record.PatientGender = dto.PatientGender;
  400. record.PatientAddress = dto.PatientAddress;
  401. record.Nationality = dto.Nationality;
  402. record.Phone = dto.Phone;
  403. record.CrowdLabels = dto.CrowdLabels;
  404. record.LabelNames = dto.LabelNames;
  405. }
  406. }
  407. }
  408. resultList.Add(record);
  409. }
  410. return resultList;
  411. }
  412. private async Task<PageCollection<ContractRecordDTO>> ConvertToDTOPage(PageCollection<ContractRecordEntity> entitys, string operationDoctor)
  413. {
  414. var resultPage = new PageCollection<ContractRecordDTO>
  415. {
  416. DataCount = entitys.DataCount,
  417. CurrentPage = entitys.CurrentPage,
  418. PageSize = entitys.PageSize,
  419. PageData = await ConvertToDTOList(entitys.PageData, operationDoctor)
  420. };
  421. return resultPage;
  422. }
  423. public async Task<ContractRecordDTO> GetPatientLastContractRecordAsync(GetPatientLastContractRecordDBRequest request)
  424. {
  425. var filter = Builders<ContractRecordEntity>.Filter.Where(f => f.ContractedPatient == request.PatientCode);
  426. filter = await AddPermissionFilter(filter, request.OperationDoctor);
  427. var result = await _contractRecordDBRepository.FindOneAsync(filter, new FindOptions<ContractRecordEntity> { Sort = Builders<ContractRecordEntity>.Sort.Descending(f => f.CreateTime).Descending(f => f.ContractState) });
  428. return await ConvertToDTO(result, request.OperationDoctor);
  429. }
  430. /// <summary>
  431. /// 更新签约记录状态
  432. /// </summary>
  433. /// <param name="request">update request</param>
  434. /// <returns></returns>
  435. public async Task<bool> UpdateContractRecordStateAsync(UpdateContractRecordStateDBRequest request)
  436. {
  437. AddDoctorCode(request.OperationDoctor);
  438. var filter = Builders<ContractRecordEntity>.Filter.Eq(f => f.Code, request.Code);
  439. var updates = new List<UpdateDefinition<ContractRecordEntity>>();
  440. if (request.ContractState != null)
  441. {
  442. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.ContractState, request.ContractState));
  443. }
  444. if (!string.IsNullOrWhiteSpace(request.Reason))
  445. {
  446. updates.Add(Builders<ContractRecordEntity>.Update.Set(f => f.Reason, request.Reason));
  447. }
  448. var update = Builders<ContractRecordEntity>.Update.Combine(updates);
  449. var result = await _contractRecordDBRepository.UpdateOneAsync(filter, update) > 0;
  450. if (result)
  451. {
  452. var contractFilter = Builders<ContractRecordEntity>.Filter.Eq(x => x.Code, request.Code);
  453. var contractEntity = await _contractRecordDBRepository.FindOneAsync(contractFilter);
  454. if (contractEntity != null && !string.IsNullOrWhiteSpace(contractEntity.ContractedPatient))
  455. {
  456. await UpdatePatientContactStateAsync(contractEntity.ContractedPatient);
  457. }
  458. }
  459. return result;
  460. }
  461. }
  462. }