From f2cc333b963cb0de81aebc5ae3a8c247e99243d8 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期二, 02 六月 2026 18:21:27 +0800
Subject: [PATCH] 【市一】同步手术视图
---
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java | 86 +++++++++++++++++++++++++++++++++++++++----
1 files changed, 78 insertions(+), 8 deletions(-)
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
index edc7410..56d4bc6 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -781,6 +781,8 @@
patMedInhosp.setDelFlag("0");
patMedInhosp.setOrgid(dto.getOrgId());
patMedInhosp.setCampusid(dto.getCampusId());
+ if (StringUtils.isNotEmpty(dto.getHealthcareRecordStatus()) && dto.getHealthcareRecordStatus().equals("FH0109.25"))
+ patMedInhosp.setRemark("棰勫嚭闄�");
return patMedInhosp;
}
@@ -807,15 +809,51 @@
patMedInhosp.setHospitaldistrictname(dto.getAreaName());
}
+ /**
+ * 澶勭悊鎮h�呮。妗堬紙鏂板鎴栨洿鏂帮級
+ * 浣跨敤 Redis 鍒嗗竷寮忛攣闃叉骞跺彂閲嶅鎻掑叆
+ */
private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto) {
- List<PatArchive> existingArchives = null;
+ // 鏋勫缓閿佺殑 key锛氬熀浜� patientno 鎴� idcardno
+ String lockKey = "pat_archive_lock:" +
+ (StringUtils.isNotEmpty(dto.getMedicalRecordNo()) ? dto.getMedicalRecordNo() : dto.getIdCardNo());
+
+ // 灏濊瘯鑾峰彇鍒嗗竷寮忛攣锛屾渶澶氱瓑寰� 3 绉掞紝閿佸畾 10 绉掕嚜鍔ㄩ噴鏀�
+ Boolean lockAcquired = redisTemplate.opsForValue().setIfAbsent(lockKey, "1", 10, TimeUnit.SECONDS);
+
+ if (lockAcquired == null || !lockAcquired) {
+ log.warn("銆恜rocessPatientArchive銆戣幏鍙栧垎甯冨紡閿佸け璐ワ紝璺宠繃鏈澶勭悊锛堝叾浠栫嚎绋嬫鍦ㄥ鐞嗭級锛宲atientno={}", dto.getMedicalRecordNo());
+ // 绛夊緟涓�娈垫椂闂村悗閲嶈瘯鏌ヨ
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ try {
+ return doProcessPatientArchive(dto);
+ } finally {
+ // 閲婃斁閿�
+ if (lockAcquired != null && lockAcquired) {
+ redisTemplate.delete(lockKey);
+ }
+ }
+ }
+ /**
+ * 瀹為檯鎵ц鎮h�呮。妗堝鐞嗛�昏緫
+ */
+ private PatArchive doProcessPatientArchive(ServiceSLTDInhospResDTO dto) {
+ List<PatArchive> existingArchives = null;
+ log.info("銆恜rocessPatientArchive銆戞柊澧炴偅鑰呮。妗堬紝鏌ヨ鍏ュ弬淇℃伅patientno:{}锛宨dcardno:{}", dto.getMedicalRecordNo(), dto.getIdCardNo());
// 绗竴姝ワ細鎸� patientno 绮剧‘鏌ラ噸锛堜笌鎻掑叆鏃朵娇鐢ㄧ殑 medicalRecordNo 涓�鑷达級
- String patientno = dto.getMedicalRecordNo() == null ? null : String.valueOf(dto.getMedicalRecordNo());
+ String patientno = StringUtils.isEmpty(dto.getMedicalRecordNo()) ? null : dto.getMedicalRecordNo();
if (StringUtils.isNotEmpty(patientno)) {
PatArchive queryByPatientNo = new PatArchive();
queryByPatientNo.setPatientno(patientno);
existingArchives = patArchiveService.selectPatArchiveList(queryByPatientNo);
+ log.debug("銆恜rocessPatientArchive銆戞寜patientno鏌ヨ锛宲atientno={}, 缁撴灉鏁伴噺={}", patientno, existingArchives.size());
}
// 绗簩姝ワ細鎸� patientno 鏌ヤ笉鍒版椂锛屾寜 idcardno 鏌ラ噸锛堝垎姝R锛岄伩鍏岮ND鏉′欢婕忔煡锛�
@@ -823,24 +861,55 @@
PatArchive queryByIdCard = new PatArchive();
queryByIdCard.setIdcardno(dto.getIdCardNo().trim());
existingArchives = patArchiveService.selectPatArchiveList(queryByIdCard);
+ log.debug("銆恜rocessPatientArchive銆戞寜idcardno鏌ヨ锛宨dcardno={}, 缁撴灉鏁伴噺={}", dto.getIdCardNo(), existingArchives.size());
}
PatArchive patArchive = buildPatientArchive(dto);
-
+ log.info("銆恜rocessPatientArchive銆戞偅鑰呮。妗堟煡閲嶅畬鎴愶紝patientno={}, 鏄惁宸插瓨鍦�={}",
+ patArchive.getPatientno(), CollectionUtils.isEmpty(existingArchives) ? "鍚�" : "鏄�(id=" + existingArchives.get(0).getId() + ")");
+
if (CollectionUtils.isEmpty(existingArchives)) {
try {
- patArchiveService.insertPatArchive(patArchive);
- log.info("銆恜rocessPatientArchive銆戞柊澧炴偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
+ // 鏈�缁堢‘璁ゆ煡璇紙闃插尽鎬х紪绋嬶細闃叉Redis閿佸け鏁堢瓑鏋佺鎯呭喌锛�
+ PatArchive finalQuery = new PatArchive();
+ if (StringUtils.isNotEmpty(dto.getIdCardNo())) {
+ finalQuery.setIdcardno(dto.getIdCardNo().trim());
+ }
+ if (StringUtils.isNotEmpty(dto.getMedicalRecordNo())) {
+ finalQuery.setPatientno(dto.getMedicalRecordNo());
+ }
+
+ List<PatArchive> finalCheck = patArchiveService.selectPatArchiveList(finalQuery);
+ log.info("銆恜rocessPatientArchive銆戞渶缁堢‘璁ゆ煡璇紝patientno={}, idcardno={}, 缁撴灉鏁伴噺={}",
+ dto.getMedicalRecordNo(), dto.getIdCardNo(), finalCheck.size());
+
+ if (CollectionUtils.isEmpty(finalCheck)) {
+ patArchiveService.insertPatArchive(patArchive);
+ log.info("銆恜rocessPatientArchive銆戔湏 鏂板鎮h�呮。妗堟垚鍔燂紝patientno={}, id={}",
+ patArchive.getPatientno(), patArchive.getId());
+ } else {
+ // 鍏朵粬绾跨▼宸茬粡鎻掑叆锛岀洿鎺ヤ娇鐢ㄥ凡鏈夎褰�
+ existingArchives = finalCheck;
+ patArchive.setId(existingArchives.get(0).getId());
+ patArchive.setNotrequiredFlag(existingArchives.get(0).getNotrequiredFlag());
+ patArchive.setNotrequiredreason(existingArchives.get(0).getNotrequiredreason());
+ log.info("銆恜rocessPatientArchive銆戞。妗堝凡琚叾浠栫嚎绋嬪垱寤猴紝浣跨敤宸叉湁璁板綍锛宨d={}", patArchive.getId());
+ }
} catch (org.springframework.dao.DuplicateKeyException e) {
- log.error("銆恜rocessPatientArchive銆戞偅鑰呮。妗堝凡瀛樺湪(骞跺彂鎻掑叆)锛岃烦杩囷細patientno={}, idcardno={}", patArchive.getPatientno(), patArchive.getIdcardno());
+ log.warn("銆恜rocessPatientArchive銆戞偅鑰呮。妗堝凡瀛樺湪(骞跺彂鎻掑叆寮傚父)锛岃烦杩囷細patientno={}, idcardno={}",
+ patArchive.getPatientno(), patArchive.getIdcardno());
// 骞跺彂鎻掑叆鍦烘櫙锛岄噸鏂版煡璇㈣幏鍙栧凡瀛樺湪鐨勮褰�
PatArchive queryRetry = new PatArchive();
queryRetry.setPatientno(patArchive.getPatientno());
+ if (StringUtils.isNotEmpty(patArchive.getIdcardno())) {
+ queryRetry.setIdcardno(patArchive.getIdcardno());
+ }
existingArchives = patArchiveService.selectPatArchiveList(queryRetry);
if (CollectionUtils.isNotEmpty(existingArchives)) {
patArchive.setId(existingArchives.get(0).getId());
patArchive.setNotrequiredFlag(existingArchives.get(0).getNotrequiredFlag());
patArchive.setNotrequiredreason(existingArchives.get(0).getNotrequiredreason());
+ log.info("銆恜rocessPatientArchive銆戜粠寮傚父鎭㈠锛岃幏鍙栧凡鏈夋。妗堬紝id={}", patArchive.getId());
}
}
} else {
@@ -848,7 +917,8 @@
patArchive.setNotrequiredFlag(existingArchives.get(0).getNotrequiredFlag());
patArchive.setNotrequiredreason(existingArchives.get(0).getNotrequiredreason());
patArchiveService.updateArchive(patArchive);
- log.info("銆恜rocessPatientArchive銆戞洿鏂版偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
+ log.info("銆恜rocessPatientArchive銆戔湏 鏇存柊鎮h�呮。妗堬紝patientno={}, id={}",
+ patArchive.getPatientno(), patArchive.getId());
}
return patArchive;
@@ -856,7 +926,7 @@
private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto) {
PatArchive patArchive = new PatArchive();
- patArchive.setPatientno(dto.getMedicalRecordNo() == null ? null : String.valueOf(dto.getMedicalRecordNo()));
+ patArchive.setPatientno(StringUtils.isEmpty(dto.getMedicalRecordNo()) ? null : dto.getMedicalRecordNo());
patArchive.setPatidHis(dto.getPatientId() == null ? null : String.valueOf(dto.getPatientId()));
patArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
patArchive.setName(dto.getPatientName());
--
Gitblit v1.9.3