ht 3 settimane fa
parent
commit
0bb0ae60db

+ 61 - 0
src/main/java/com/malk/minglei/config/DictionaryConfiguration.java

@@ -0,0 +1,61 @@
+package com.malk.minglei.config;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
+import org.springframework.jdbc.datasource.DriverManagerDataSource;
+
+import javax.sql.DataSource;
+
+/**
+ * 数据字典 Oracle 数据源和具名参数 JDBC 模板配置。
+ */
+@Configuration
+@EnableConfigurationProperties(DictionaryProperties.class)
+public class DictionaryConfiguration {
+
+    /**
+     * 仅在配置数据源地址后创建数据字典专用 Oracle 数据源。
+     *
+     * @param properties 数据字典配置项
+     * @return 数据字典数据源
+     */
+    @Bean("dictionaryDataSource")
+    @ConditionalOnExpression("'${minglei.dictionary.datasource.url:}' != ''")
+    public DataSource dictionaryDataSource(DictionaryProperties properties) {
+        DictionaryProperties.DataSourceProperties datasource = properties.getDatasource();
+        DriverManagerDataSource dataSource = new DriverManagerDataSource();
+        dataSource.setUrl(datasource.getUrl());
+        if (hasText(datasource.getDriverClassName())) {
+            dataSource.setDriverClassName(datasource.getDriverClassName());
+        }
+        if (hasText(datasource.getUsername())) {
+            dataSource.setUsername(datasource.getUsername());
+        }
+        if (datasource.getPassword() != null) {
+            dataSource.setPassword(datasource.getPassword());
+        }
+        return dataSource;
+    }
+
+    /**
+     * 创建供具体字典 SQL 使用的具名参数 JDBC 模板。
+     *
+     * @param dataSource 数据字典数据源
+     * @return 数据字典 JDBC 模板
+     */
+    @Bean("dictionaryNamedParameterJdbcTemplate")
+    @ConditionalOnBean(name = "dictionaryDataSource")
+    public NamedParameterJdbcTemplate dictionaryNamedParameterJdbcTemplate(
+            @Qualifier("dictionaryDataSource") DataSource dataSource) {
+        return new NamedParameterJdbcTemplate(dataSource);
+    }
+
+    private boolean hasText(String value) {
+        return value != null && !value.trim().isEmpty();
+    }
+}

+ 45 - 0
src/main/java/com/malk/minglei/controller/DictionaryController.java

@@ -0,0 +1,45 @@
+package com.malk.minglei.controller;
+
+import com.malk.minglei.dto.ApiResponse;
+import com.malk.minglei.service.dictionary.DictionaryQueryService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * 对外提供已注册数据字典查询的 HTTP 接口。
+ */
+@RestController
+@RequestMapping("/api/dictionary")
+public class DictionaryController {
+
+    private final DictionaryQueryService dictionaryQueryService;
+
+    /**
+     * 创建数据字典控制器。
+     *
+     * @param dictionaryQueryService 数据字典查询服务
+     */
+    public DictionaryController(DictionaryQueryService dictionaryQueryService) {
+        this.dictionaryQueryService = dictionaryQueryService;
+    }
+
+    /**
+     * 按字典编码查询数据,并将 URL 查询参数传递给该字典允许的筛选规则。
+     *
+     * @param dictionaryCode 数据字典编码
+     * @param filters 筛选条件
+     * @return 包含分页信息和字典记录的查询结果
+     */
+    @GetMapping("/{dictionaryCode}")
+    public ResponseEntity<ApiResponse<Map<String, Object>>> query(
+            @PathVariable String dictionaryCode,
+            @RequestParam Map<String, String> filters) {
+        return ResponseEntity.ok(ApiResponse.success(dictionaryQueryService.query(dictionaryCode, filters)));
+    }
+}