From 336d113220f675976f864ad3eab7df7cd432808d Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 01 五月 2026 08:35:43 +0800
Subject: [PATCH] Merge branch 'master' of http://116.62.18.175:6699/r/smartor
---
smartor/src/main/java/com/smartor/service/impl/Icd10ServiceImpl.java | 208 ++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 186 insertions(+), 22 deletions(-)
diff --git a/smartor/src/main/java/com/smartor/service/impl/Icd10ServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/Icd10ServiceImpl.java
index e84b6a3..5b2d4a9 100644
--- a/smartor/src/main/java/com/smartor/service/impl/Icd10ServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/Icd10ServiceImpl.java
@@ -1,97 +1,261 @@
package com.smartor.service.impl;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.google.gson.Gson;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.http.HttpUtils;
import com.smartor.domain.Icd10;
import com.smartor.mapper.Icd10Mapper;
import com.smartor.service.IIcd10Service;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* 鐤剧梾Service涓氬姟灞傚鐞�
- *
+ *
* @author ruoyi
* @date 2023-12-21
*/
+@Slf4j
@Service
-public class Icd10ServiceImpl implements IIcd10Service
-{
+public class Icd10ServiceImpl implements IIcd10Service {
+
@Autowired
private Icd10Mapper icd10Mapper;
+ @Value("${sltd_pub_path}")
+ private String sltdPubPath;
+
+ @Value("${lwl_app_key}")
+ private String APP_KEY;
+
+ /**
+ * 鍥哄畾 orgId
+ */
+ private static final long ORG_ID = 20001001L;
+ /**
+ * 姣忛〉鎷夊彇鏉℃暟锛堟帴鍙f渶澶у厑璁� 1000锛�
+ */
+ private static final int PAGE_SIZE = 1000;
+ /**
+ * 鎵归噺鍐欏叆鍗曟壒鏈�澶ф潯鏁�
+ */
+ private static final int BATCH_SIZE = 500;
+
/**
* 鏌ヨ鐤剧梾
- *
+ *
* @param icdid 鐤剧梾涓婚敭
* @return 鐤剧梾
*/
@Override
- public Icd10 selectIcd10ByIcdid(Long icdid)
- {
+ public Icd10 selectIcd10ByIcdid(Long icdid) {
return icd10Mapper.selectIcd10ByIcdid(icdid);
}
/**
* 鏌ヨ鐤剧梾鍒楄〃
- *
+ *
* @param icd10 鐤剧梾
* @return 鐤剧梾
*/
@Override
- public List<Icd10> selectIcd10List(Icd10 icd10)
- {
+ public List<Icd10> selectIcd10List(Icd10 icd10) {
return icd10Mapper.selectIcd10List(icd10);
}
/**
* 鏂板鐤剧梾
- *
+ *
* @param icd10 鐤剧梾
* @return 缁撴灉
*/
@Override
- public int insertIcd10(Icd10 icd10)
- {
+ public int insertIcd10(Icd10 icd10) {
icd10.setCreateTime(DateUtils.getNowDate());
return icd10Mapper.insertIcd10(icd10);
}
/**
* 淇敼鐤剧梾
- *
+ *
* @param icd10 鐤剧梾
* @return 缁撴灉
*/
@Override
- public int updateIcd10(Icd10 icd10)
- {
+ public int updateIcd10(Icd10 icd10) {
icd10.setUpdateTime(DateUtils.getNowDate());
return icd10Mapper.updateIcd10(icd10);
}
/**
* 鎵归噺鍒犻櫎鐤剧梾
- *
+ *
* @param icdids 闇�瑕佸垹闄ょ殑鐤剧梾涓婚敭
* @return 缁撴灉
*/
@Override
- public int deleteIcd10ByIcdids(Long[] icdids)
- {
+ public int deleteIcd10ByIcdids(Long[] icdids) {
return icd10Mapper.deleteIcd10ByIcdids(icdids);
}
/**
* 鍒犻櫎鐤剧梾淇℃伅
- *
+ *
* @param icdid 鐤剧梾涓婚敭
* @return 缁撴灉
*/
@Override
- public int deleteIcd10ByIcdid(Long icdid)
- {
+ public int deleteIcd10ByIcdid(Long icdid) {
return icd10Mapper.deleteIcd10ByIcdid(icdid);
}
+
+ /**
+ * 浠庤繙绋嬫帴鍙o紙鏉ユ湭鏉ワ級鍒嗛〉鎷夊彇骞跺閲忓啓鍏� icd10 琛ㄣ��
+ * <p>
+ * 浼樺寲瑕佺偣锛�
+ * 1. 姣忛〉鏈�澶ф媺鍙� 1000 鏉★紝鍑忓皯璇锋眰娆℃暟銆�
+ * 2. 姣忛〉鎶婂綋鍓嶉〉鎵�鏈� icdcode 鐢ㄤ竴鏉� IN SQL 涓�娆℃壒閲忔煡搴擄紝閬垮厤寰幆 N 娆″崟鏉℃煡璇€��
+ * 3. 灏嗕笉瀛樺湪鐨勮褰曟敹闆嗗悗鍒嗘壒锛堟瘡鎵� 500 鏉★級鎵归噺鎻掑叆銆�
+ * </p>
+ *
+ * @return 鏈杩愯鏂板鎬绘潯鏁�
+ */
+ @Override
+ public int queryAddIcd10() {
+ int totalInserted = 0;
+ long current = 1;
+ long totalPages = 1; // 棣栨寰幆鍓嶅厛鎵ц涓�娆�
+
+ log.info("[寮�濮媇 浠庢潵鏈潵鎷夊彇 ICD10 澧為噺鏁版嵁锛宱rgId={}", ORG_ID);
+
+ do {
+ // 鏋勫缓璇锋眰浣�
+ Map<String, Object> requestBody = new HashMap<>();
+ requestBody.put("orgId", ORG_ID);
+ requestBody.put("searchText", "");
+ requestBody.put("size", PAGE_SIZE);
+ requestBody.put("current", current);
+
+ String responseStr;
+ try {
+ Map<String, String> headers = buildRequestHeaders();
+ responseStr = HttpUtils.sendPostByHeader(sltdPubPath + "/hbos-thirdparty-integration/standard/base/dtc/pageDiagnosisDict", new Gson().toJson(requestBody), headers);
+
+ } catch (Exception e) {
+ log.error("[绗瑊}椤礭 璇锋眰鏉ユ湭鏉ユ帴鍙eけ璐�", current, e);
+ break;
+ }
+
+ if (responseStr == null || responseStr.isEmpty()) {
+ log.warn("[绗瑊}椤礭 鎺ュ彛杩斿洖绌猴紝鍋滄閲囬泦", current);
+ break;
+ }
+
+ JSONObject resp = JSON.parseObject(responseStr);
+ if (resp == null || !Boolean.TRUE.equals(resp.getBoolean("success"))) {
+ log.error("[绗瑊}椤礭 鎺ュ彛杩斿洖澶辫触锛歿}", current, responseStr);
+ break;
+ }
+
+ JSONObject data = resp.getJSONObject("data");
+ if (data == null) {
+ break;
+ }
+
+ // 璁$畻鎬婚〉鏁�
+ long total = data.getLongValue("total");
+ long pageSize = data.getLongValue("size");
+ if (pageSize <= 0) {
+ break;
+ }
+ totalPages = (total + pageSize - 1) / pageSize;
+
+ JSONArray records = data.getJSONArray("records");
+ if (records == null || records.isEmpty()) {
+ break;
+ }
+
+ log.info("[绗瑊}/{}椤礭 鑾峰彇 {} 鏉¤褰曪紝鎬粄}鏉�", current, totalPages, records.size(), total);
+
+ // 瑙f瀽褰撳墠椤垫暟鎹�
+ List<String> pageNames = new ArrayList<>();
+ List<Icd10> pageList = new ArrayList<>();
+ for (int i = 0; i < records.size(); i++) {
+ JSONObject rec = records.getJSONObject(i);
+ String icdCode = rec.getString("icdCode");
+ if (icdCode == null || icdCode.isEmpty()) {
+ continue;
+ }
+ String icdName = StringUtils.isEmpty(rec.getString("name")) ? null : rec.getString("name").trim();
+ if (icdName == null || icdName.isEmpty()) {
+ continue;
+ }
+ pageNames.add(icdName);
+
+ Icd10 icd10 = new Icd10();
+ icd10.setIcdcode(icdCode);
+ icd10.setIcdname(icdName);
+ icd10.setIcdpym(rec.getString("pinyin"));
+ icd10.setHisIcdid(rec.getString("his_icdid"));
+ icd10.setOrgid(String.valueOf(ORG_ID));
+ icd10.setDelFlag("0");
+ icd10.setCreateTime(DateUtils.getNowDate());
+ pageList.add(icd10);
+ }
+
+ if (pageNames.isEmpty()) {
+ current++;
+ continue;
+ }
+
+ // 涓�娆� IN 鏌ュ簱锛岃幏鍙栧凡瀛樺湪鐨� icdname锛堟牳蹇冨幓閲嶄紭鍖栫偣锛夊崡鍗庨檮涓�鐨刬cdname涓嶄細閲嶅锛宨cd10code浼氶噸澶�
+ Set<String> existingNames = new HashSet<>(icd10Mapper.selectExistingIcdcodes(pageNames));
+
+ // 杩囨护鍑轰笉瀛樺湪鐨勮褰�
+ List<Icd10> newList = pageList.stream().filter(item -> !existingNames.contains(item.getIcdname())).collect(Collectors.toList());
+
+ log.info("[绗瑊}/{}椤礭 褰撳墠椤靛叡 {} 鏉★紝宸插瓨鍦� {} 鏉★紝闇�鏂板叆搴� {} 鏉�", current, totalPages, pageList.size(), existingNames.size(), newList.size());
+
+ // 鍒嗘壒鎵归噺鎻掑叆
+ int inserted = batchInsert(newList);
+ totalInserted += inserted;
+
+ current++;
+ } while (current <= totalPages);
+
+ log.info("[瀹屾垚] ICD10 澧為噺閲囬泦缁撴潫锛屾湰娆″叡鏂板 {} 鏉�", totalInserted);
+ return totalInserted;
+ }
+
+ /**
+ * 鍒嗘壒鎵归噺鎻掑叆锛屾瘡鎵规渶澶� BATCH_SIZE 鏉�
+ */
+ private int batchInsert(List<Icd10> list) {
+ if (list == null || list.isEmpty()) {
+ return 0;
+ }
+ int total = 0;
+ int size = list.size();
+ for (int start = 0; start < size; start += BATCH_SIZE) {
+ int end = Math.min(start + BATCH_SIZE, size);
+ total += icd10Mapper.batchIcd10(list.subList(start, end));
+ }
+ return total;
+ }
+
+ private Map<String, String> buildRequestHeaders() {
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ headers.put("app-key", APP_KEY);
+ return headers;
+ }
}
--
Gitblit v1.9.3