package com.vincent.rsf.server.manager.service; import com.vincent.rsf.server.manager.mapper.MatnrMapper; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; /** * cus_item_sync_view 查询;配置了副库 url 时走 JdbcTemplate,否则走主库 Mapper */ @Service public class CusItemSyncViewQueryService { @Autowired(required = false) @Qualifier("cusItemSyncJdbcTemplate") private JdbcTemplate cusItemSyncJdbcTemplate; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private MatnrMapper matnrMapper; /** 当前视图查询实际使用的数据源说明 */ public String effectiveDataSourceLabel() { return cusItemSyncJdbcTemplate != null ? "cus-item-sync" : "primary"; } /** * 取视图前若干行,用于连通性验证(与业务查询同一套路由:副库优先) */ public List> probeSample(int limit) { int n = Math.min(50, Math.max(1, limit)); JdbcTemplate tpl = cusItemSyncJdbcTemplate != null ? cusItemSyncJdbcTemplate : jdbcTemplate; return tpl.queryForList( "SELECT item_no, item_spec, unit_no FROM cus_item_sync_view LIMIT " + n); } public List> listByItemNos(Collection itemNos) { if (itemNos == null || itemNos.isEmpty()) { return Collections.emptyList(); } List codes = new ArrayList<>(); for (String code : itemNos) { String c = StringUtils.trimToNull(code); if (c != null) { codes.add(c); } } if (codes.isEmpty()) { return Collections.emptyList(); } if (cusItemSyncJdbcTemplate != null) { String placeholders = String.join(",", Collections.nCopies(codes.size(), "?")); String sql = "SELECT item_no, item_spec, unit_no FROM cus_item_sync_view WHERE item_no IN (" + placeholders + ")"; return cusItemSyncJdbcTemplate.queryForList(sql, codes.toArray()); } return matnrMapper.selectByCusItemSyncView(codes); } }