From 287fa25ac03c4747472086232150723edb2db82f Mon Sep 17 00:00:00 2001
From: hejianhao <15708179461@qq.com>
Date: 星期二, 01 九月 2026 16:25:30 +0800
Subject: [PATCH] fix0901: 继续修复扫描问题3
---
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java | 39 ++++++++++++++++++++++++++++++++++-----
1 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java
index 4fb9150..7b9ab69 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java
@@ -24,7 +24,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import com.tcm.training.admin.common.enums.EnabledStatus;
+import com.tcm.training.admin.common.enums.EnabledStatusEnum;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -32,6 +32,8 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.LinkedHashMap;
@Slf4j
@Service
@@ -41,6 +43,7 @@
private final SysRegionMapper sysRegionMapper;
private final ClinicMapper clinicMapper;
private final VzanHttpUtil vzanHttpUtil;
+ private volatile Map<String, SysRegion> regionCache;
public ProvincialAgentAppService(ProvincialAgentMapper agentMapper, AgentRegionMapper regionMapper,
SysRegionMapper sysRegionMapper, ClinicMapper clinicMapper, VzanHttpUtil vzanHttpUtil) {
@@ -146,12 +149,13 @@
agent.setAccountHolder(trim(request.getAccountHolder()));
agent.setBranchName(trim(request.getBranchName()));
agent.setContactInfo(trim(request.getContactInfo()));
- agent.setStatus(request.getStatus() == null ? EnabledStatus.ENABLED.getValue() : request.getStatus());
+ agent.setStatus(request.getStatus() == null ? EnabledStatusEnum.ENABLED.getValue() : request.getStatus());
agent.setAddress(trim(request.getAddress()));
}
private void saveRegions(ProvincialAgent agent, ProvincialAgentSaveRequest request) {
if (request.getRegions() == null) return;
+ List<AgentRegion> regions = new ArrayList<AgentRegion>();
for (ProvincialAgentSaveRequest.RegionItem item : request.getRegions()) {
if (item == null || trim(item.getRegionCode()) == null) continue;
RegionInfo info = resolveRegion(item.getRegionCode());
@@ -160,7 +164,10 @@
region.setRegionCode(trim(item.getRegionCode()));
region.setRegionName(info.name);
region.setRegionLevel(info.path.size());
- regionMapper.insert(region);
+ regions.add(region);
+ }
+ if (!regions.isEmpty()) {
+ regionMapper.insertBatch(regions);
}
}
@@ -229,11 +236,11 @@
private RegionInfo resolveRegion(String code) {
List<String> path = new ArrayList<String>();
List<String> names = new ArrayList<String>();
- SysRegion current = sysRegionMapper.selectByCode(code);
+ SysRegion current = getRegionCache().get(code);
while (current != null) {
path.add(0, current.getCode());
names.add(0, current.getName());
- current = current.getParentId() == null || current.getParentId() == 0 ? null : sysRegionMapper.selectById(current.getParentId());
+ current = current.getParentId() == null || current.getParentId() == 0 ? null : getRegionById(current.getParentId());
}
if (path.isEmpty()) {
path.add(code);
@@ -242,6 +249,28 @@
return new RegionInfo(path, String.join("", names));
}
+ private Map<String, SysRegion> getRegionCache() {
+ Map<String, SysRegion> cache = regionCache;
+ if (cache == null) {
+ synchronized (this) {
+ cache = regionCache;
+ if (cache == null) {
+ cache = new LinkedHashMap<String, SysRegion>();
+ for (SysRegion region : sysRegionMapper.selectAllOrdered()) cache.put(region.getCode(), region);
+ regionCache = cache;
+ }
+ }
+ }
+ return cache;
+ }
+
+ private SysRegion getRegionById(Long id) {
+ for (SysRegion region : getRegionCache().values()) if (id.equals(region.getId())) {
+ return region;
+ }
+ return null;
+ }
+
private String trim(String value) {
if (value == null) return null;
String trimmed = value.trim();
--
Gitblit v1.7.1