hejianhao
2026-09-01 287fa25ac03c4747472086232150723edb2db82f
fix0901: 继续修复扫描问题3
2个文件已修改
46 ■■■■■ 已修改文件
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/mapper/AgentRegionMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/mapper/AgentRegionMapper.java
@@ -3,7 +3,18 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tcm.training.admin.agent.entity.AgentRegion;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface AgentRegionMapper extends BaseMapper<AgentRegion> {
    /** 批量保存代理区域。 */
    @Insert("<script>INSERT INTO tcm_agent_region (agent_id, region_code, region_name, region_level, created_at) VALUES "
            + "<foreach collection='regions' item='item' separator=','>"
            + "(#{item.agentId}, #{item.regionCode}, #{item.regionName}, #{item.regionLevel}, #{item.createdAt})"
            + "</foreach></script>")
    int insertBatch(@Param("regions") List<AgentRegion> regions);
}
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java
@@ -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) {
@@ -152,6 +155,7 @@
    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();