| @@ -1,7 +1,7 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 | |||||
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 | |||||
| http://maven.apache.org/xsd/maven-4.0.0.xsd"> | http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
| <modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
| @@ -43,6 +43,15 @@ | |||||
| <dependency> | <dependency> | ||||
| <groupId>com.microsoft.sqlserver</groupId> | <groupId>com.microsoft.sqlserver</groupId> | ||||
| <artifactId>mssql-jdbc</artifactId> | <artifactId>mssql-jdbc</artifactId> | ||||
| <version>9.2.1.jre8</version> | |||||
| <scope>runtime</scope> | |||||
| </dependency> | |||||
| <!-- PostgreSQL JDBC Driver --> | |||||
| <dependency> | |||||
| <groupId>org.postgresql</groupId> | |||||
| <artifactId>postgresql</artifactId> | |||||
| <version>42.2.27</version> | |||||
| <scope>runtime</scope> | <scope>runtime</scope> | ||||
| </dependency> | </dependency> | ||||
| @@ -65,11 +74,16 @@ | |||||
| <artifactId>spring-boot-starter-test</artifactId> | <artifactId>spring-boot-starter-test</artifactId> | ||||
| <scope>test</scope> | <scope>test</scope> | ||||
| </dependency> | </dependency> | ||||
| <!-- Swagger3/Springfox 3.x 依赖 --> | |||||
| <!-- Swagger2/Springfox 2.9.2 依赖 - 与Spring Boot 2.7.x兼容 --> | |||||
| <dependency> | |||||
| <groupId>io.springfox</groupId> | |||||
| <artifactId>springfox-swagger2</artifactId> | |||||
| <version>2.9.2</version> | |||||
| </dependency> | |||||
| <dependency> | <dependency> | ||||
| <groupId>io.springfox</groupId> | <groupId>io.springfox</groupId> | ||||
| <artifactId>springfox-boot-starter</artifactId> | |||||
| <version>3.0.0</version> | |||||
| <artifactId>springfox-swagger-ui</artifactId> | |||||
| <version>2.9.2</version> | |||||
| </dependency> | </dependency> | ||||
| </dependencies> | </dependencies> | ||||
| @@ -89,4 +103,4 @@ | |||||
| </plugin> | </plugin> | ||||
| </plugins> | </plugins> | ||||
| </build> | </build> | ||||
| </project> | |||||
| </project> | |||||
| @@ -2,6 +2,11 @@ package com.example.webapi; | |||||
| import org.springframework.boot.SpringApplication; | import org.springframework.boot.SpringApplication; | ||||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; | |||||
| import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; | |||||
| import org.springframework.data.jpa.repository.config.EnableJpaRepositories; | |||||
| import org.springframework.scheduling.annotation.EnableScheduling; | |||||
| import springfox.documentation.swagger2.annotations.EnableSwagger2; | |||||
| /** | /** | ||||
| * SpringBoot WebAPI 应用程序主类 | * SpringBoot WebAPI 应用程序主类 | ||||
| @@ -9,14 +14,21 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; | |||||
| * @author Your Name | * @author Your Name | ||||
| * @version 1.0.0 | * @version 1.0.0 | ||||
| */ | */ | ||||
| @SpringBootApplication | |||||
| @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) | |||||
| @EnableScheduling | |||||
| @EnableSwagger2 | |||||
| @EnableJpaRepositories( | |||||
| basePackages = {"com.example.webapi.repository.pg"}, | |||||
| entityManagerFactoryRef = "postgresqlEntityManagerFactory", | |||||
| transactionManagerRef = "postgresqlTransactionManager" | |||||
| ) | |||||
| public class WebApiApplication { | public class WebApiApplication { | ||||
| public static void main(String[] args) { | public static void main(String[] args) { | ||||
| SpringApplication.run(WebApiApplication.class, args); | SpringApplication.run(WebApiApplication.class, args); | ||||
| System.out.println("================================="); | System.out.println("================================="); | ||||
| System.out.println("WebAPI 应用程序启动成功!"); | System.out.println("WebAPI 应用程序启动成功!"); | ||||
| System.out.println("访问地址: http://localhost:8080/api"); | |||||
| System.out.println("访问地址: http://localhost:8806/fuquanapi"); | |||||
| System.out.println("================================="); | System.out.println("================================="); | ||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,149 @@ | |||||
| package com.example.webapi.config; | |||||
| import org.springframework.beans.factory.annotation.Value; | |||||
| import org.springframework.boot.jdbc.DataSourceBuilder; | |||||
| import org.springframework.context.annotation.Bean; | |||||
| import org.springframework.context.annotation.Configuration; | |||||
| import org.springframework.context.annotation.Primary; | |||||
| import org.springframework.orm.jpa.JpaTransactionManager; | |||||
| import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; | |||||
| import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; | |||||
| import org.springframework.transaction.PlatformTransactionManager; | |||||
| import javax.sql.DataSource; | |||||
| import java.util.HashMap; | |||||
| import java.util.Map; | |||||
| @Configuration | |||||
| public class DataSourceConfig { | |||||
| @Value("${spring.datasource.sqlserver.url}") | |||||
| private String sqlServerUrl; | |||||
| @Value("${spring.datasource.sqlserver.username}") | |||||
| private String sqlServerUsername; | |||||
| @Value("${spring.datasource.sqlserver.password}") | |||||
| private String sqlServerPassword; | |||||
| @Value("${spring.datasource.sqlserver.driver-class-name}") | |||||
| private String sqlServerDriverClassName; | |||||
| @Value("${spring.datasource.postgresql.url}") | |||||
| private String postgresqlUrl; | |||||
| @Value("${spring.datasource.postgresql.username}") | |||||
| private String postgresqlUsername; | |||||
| @Value("${spring.datasource.postgresql.password}") | |||||
| private String postgresqlPassword; | |||||
| @Value("${spring.datasource.postgresql.driver-class-name}") | |||||
| private String postgresqlDriverClassName; | |||||
| @Primary | |||||
| @Bean(name = "sqlServerDataSource") | |||||
| public DataSource sqlServerDataSource() { | |||||
| System.out.println("配置SQL Server数据源:"); | |||||
| System.out.println("URL: " + sqlServerUrl); | |||||
| System.out.println("Username: " + sqlServerUsername); | |||||
| System.out.println("Driver: " + sqlServerDriverClassName); | |||||
| return DataSourceBuilder.create() | |||||
| .url(sqlServerUrl) | |||||
| .username(sqlServerUsername) | |||||
| .password(sqlServerPassword) | |||||
| .driverClassName(sqlServerDriverClassName) | |||||
| .type(com.zaxxer.hikari.HikariDataSource.class) | |||||
| .build(); | |||||
| } | |||||
| @Bean(name = "postgresqlDataSource") | |||||
| public DataSource postgresqlDataSource() { | |||||
| System.out.println("配置PostgreSQL数据源:"); | |||||
| System.out.println("URL: " + postgresqlUrl); | |||||
| System.out.println("Username: " + postgresqlUsername); | |||||
| System.out.println("Driver: " + postgresqlDriverClassName); | |||||
| return DataSourceBuilder.create() | |||||
| .url(postgresqlUrl) | |||||
| .username(postgresqlUsername) | |||||
| .password(postgresqlPassword) | |||||
| .driverClassName(postgresqlDriverClassName) | |||||
| .type(com.zaxxer.hikari.HikariDataSource.class) | |||||
| .build(); | |||||
| } | |||||
| @Primary | |||||
| @Bean(name = "sqlServerEntityManagerFactory") | |||||
| public LocalContainerEntityManagerFactoryBean sqlServerEntityManagerFactory() { | |||||
| System.out.println("创建SQL Server EntityManagerFactory..."); | |||||
| LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); | |||||
| em.setDataSource(sqlServerDataSource()); | |||||
| em.setPackagesToScan("com.example.webapi.entity"); | |||||
| em.setPersistenceUnitName("sqlServerPersistenceUnit"); | |||||
| HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); | |||||
| vendorAdapter.setDatabasePlatform("org.hibernate.dialect.SQLServer2008Dialect"); | |||||
| vendorAdapter.setShowSql(true); | |||||
| em.setJpaVendorAdapter(vendorAdapter); | |||||
| Map<String, Object> properties = new HashMap<>(); | |||||
| properties.put("hibernate.hbm2ddl.auto", "none"); | |||||
| properties.put("hibernate.show_sql", "true"); | |||||
| properties.put("hibernate.format_sql", "true"); | |||||
| properties.put("hibernate.physical_naming_strategy", "org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl"); | |||||
| em.setJpaPropertyMap(properties); | |||||
| System.out.println("SQL Server EntityManagerFactory创建完成"); | |||||
| return em; | |||||
| } | |||||
| @Bean(name = "postgresqlEntityManagerFactory") | |||||
| public LocalContainerEntityManagerFactoryBean postgresqlEntityManagerFactory() { | |||||
| System.out.println("创建PostgreSQL EntityManagerFactory..."); | |||||
| LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); | |||||
| em.setDataSource(postgresqlDataSource()); | |||||
| em.setPackagesToScan("com.example.webapi.entity.postgresql"); | |||||
| em.setPersistenceUnitName("postgresqlPersistenceUnit"); | |||||
| HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); | |||||
| vendorAdapter.setDatabasePlatform("org.hibernate.dialect.PostgreSQLDialect"); | |||||
| vendorAdapter.setShowSql(true); | |||||
| em.setJpaVendorAdapter(vendorAdapter); | |||||
| Map<String, Object> properties = new HashMap<>(); | |||||
| properties.put("hibernate.hbm2ddl.auto", "none"); | |||||
| properties.put("hibernate.show_sql", "true"); | |||||
| properties.put("hibernate.format_sql", "true"); | |||||
| properties.put("hibernate.physical_naming_strategy", "org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl"); | |||||
| em.setJpaPropertyMap(properties); | |||||
| // System.out.println("PostgreSQL EntityManagerFactory创建完成"); | |||||
| // System.out.println("PostgreSQL EntityManagerFactory数据源: " + em.getDataSource()); | |||||
| // System.out.println("PostgreSQL EntityManagerFactory包扫描: " + em.getPackagesToScan()[0]); | |||||
| // System.out.println("PostgreSQL EntityManagerFactory方言: " + vendorAdapter.getDatabasePlatform()); | |||||
| return em; | |||||
| } | |||||
| @Primary | |||||
| @Bean(name = "sqlServerTransactionManager") | |||||
| public PlatformTransactionManager sqlServerTransactionManager() { | |||||
| System.out.println("创建SQL Server TransactionManager..."); | |||||
| JpaTransactionManager transactionManager = new JpaTransactionManager(); | |||||
| transactionManager.setEntityManagerFactory(sqlServerEntityManagerFactory().getObject()); | |||||
| System.out.println("SQL Server TransactionManager创建完成"); | |||||
| return transactionManager; | |||||
| } | |||||
| @Bean(name = "postgresqlTransactionManager") | |||||
| public PlatformTransactionManager postgresqlTransactionManager() { | |||||
| System.out.println("创建PostgreSQL TransactionManager..."); | |||||
| JpaTransactionManager transactionManager = new JpaTransactionManager(); | |||||
| transactionManager.setEntityManagerFactory(postgresqlEntityManagerFactory().getObject()); | |||||
| System.out.println("PostgreSQL TransactionManager创建完成"); | |||||
| return transactionManager; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,15 @@ | |||||
| package com.example.webapi.config; | |||||
| import org.springframework.context.annotation.Configuration; | |||||
| import org.springframework.data.jpa.repository.config.EnableJpaRepositories; | |||||
| import org.springframework.transaction.annotation.EnableTransactionManagement; | |||||
| @Configuration | |||||
| @EnableJpaRepositories( | |||||
| basePackages = {"com.example.webapi.repository"}, | |||||
| entityManagerFactoryRef = "sqlServerEntityManagerFactory", | |||||
| transactionManagerRef = "sqlServerTransactionManager" | |||||
| ) | |||||
| @EnableTransactionManagement | |||||
| public class SimpleJpaConfig { | |||||
| } | |||||
| @@ -3,20 +3,22 @@ package com.example.webapi.config; | |||||
| import org.springframework.context.annotation.Bean; | import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | import org.springframework.context.annotation.Configuration; | ||||
| import springfox.documentation.builders.ApiInfoBuilder; | import springfox.documentation.builders.ApiInfoBuilder; | ||||
| import springfox.documentation.builders.ParameterBuilder; | |||||
| import springfox.documentation.builders.PathSelectors; | import springfox.documentation.builders.PathSelectors; | ||||
| import springfox.documentation.builders.RequestHandlerSelectors; | import springfox.documentation.builders.RequestHandlerSelectors; | ||||
| import springfox.documentation.builders.RequestParameterBuilder; | |||||
| import springfox.documentation.schema.ScalarType; | |||||
| import springfox.documentation.service.ApiInfo; | import springfox.documentation.service.ApiInfo; | ||||
| import springfox.documentation.service.Contact; | import springfox.documentation.service.Contact; | ||||
| import springfox.documentation.service.ParameterType; | |||||
| import springfox.documentation.service.RequestParameter; | |||||
| import springfox.documentation.service.Parameter; | |||||
| import springfox.documentation.service.ResponseMessage; | |||||
| import springfox.documentation.schema.ModelRef; | |||||
| import springfox.documentation.spi.DocumentationType; | import springfox.documentation.spi.DocumentationType; | ||||
| import springfox.documentation.spring.web.plugins.Docket; | import springfox.documentation.spring.web.plugins.Docket; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.List; | import java.util.List; | ||||
| import static com.google.common.collect.Lists.newArrayList; | |||||
| /** | /** | ||||
| * Swagger配置类 | * Swagger配置类 | ||||
| * 配置Swagger3文档,支持详细的请求参数和响应参数说明 | * 配置Swagger3文档,支持详细的请求参数和响应参数说明 | ||||
| @@ -25,19 +27,23 @@ import java.util.List; | |||||
| public class SwaggerConfig { | public class SwaggerConfig { | ||||
| @Bean | @Bean | ||||
| public Docket api() { | public Docket api() { | ||||
| return new Docket(DocumentationType.OAS_30) | |||||
| return new Docket(DocumentationType.SWAGGER_2) | |||||
| .apiInfo(apiInfo()) | .apiInfo(apiInfo()) | ||||
| .select() | .select() | ||||
| .apis(RequestHandlerSelectors.basePackage("com.example.webapi.controller")) | .apis(RequestHandlerSelectors.basePackage("com.example.webapi.controller")) | ||||
| .paths(PathSelectors.any()) | .paths(PathSelectors.any()) | ||||
| .build() | .build() | ||||
| .globalRequestParameters(getGlobalRequestParameters()) | |||||
| .globalOperationParameters(getGlobalParameters()) | |||||
| // 以下设置对展示参数说明和返回值说明很重要 | // 以下设置对展示参数说明和返回值说明很重要 | ||||
| .useDefaultResponseMessages(false) // 不使用默认的响应消息 | .useDefaultResponseMessages(false) // 不使用默认的响应消息 | ||||
| .forCodeGeneration(true) // 为代码生成优化 | .forCodeGeneration(true) // 为代码生成优化 | ||||
| .pathMapping("/"); // 设置路径映射 | |||||
| .pathMapping("/") // 设置路径映射 | |||||
| .tags(new springfox.documentation.service.Tag("数据同步接口", "数据同步相关接口")) | |||||
| .tags(new springfox.documentation.service.Tag("供应商管理", "供应商相关接口")) | |||||
| .tags(new springfox.documentation.service.Tag("车辆管理", "车辆信息相关接口")) | |||||
| .tags(new springfox.documentation.service.Tag("称重记录", "称重记录相关接口")); | |||||
| } | } | ||||
| /** | /** | ||||
| * API信息配置 | * API信息配置 | ||||
| */ | */ | ||||
| @@ -49,45 +55,45 @@ public class SwaggerConfig { | |||||
| .contact(new Contact("开发团队", "http://www.example.com", "dev@example.com")) | .contact(new Contact("开发团队", "http://www.example.com", "dev@example.com")) | ||||
| .build(); | .build(); | ||||
| } | } | ||||
| /** | /** | ||||
| * 获取全局请求参数 | * 获取全局请求参数 | ||||
| * 注意:在Swagger UI中这些参数设置为非必需,以便能够正常访问Swagger界面 | * 注意:在Swagger UI中这些参数设置为非必需,以便能够正常访问Swagger界面 | ||||
| * 实际API调用时,这些参数仍然需要通过拦截器进行验证 | * 实际API调用时,这些参数仍然需要通过拦截器进行验证 | ||||
| */ | */ | ||||
| private List<RequestParameter> getGlobalRequestParameters() { | |||||
| List<RequestParameter> parameters = new ArrayList<>(); | |||||
| private List<Parameter> getGlobalParameters() { | |||||
| List<Parameter> parameters = new ArrayList<>(); | |||||
| // AK (Access Key) - 在Swagger中设为非必需,便于测试 | // AK (Access Key) - 在Swagger中设为非必需,便于测试 | ||||
| RequestParameter akParam = new RequestParameterBuilder() | |||||
| Parameter akParam = new ParameterBuilder() | |||||
| .name("ak") | .name("ak") | ||||
| .description("访问密钥 (Access Key) - 必填") | .description("访问密钥 (Access Key) - 必填") | ||||
| .in(ParameterType.HEADER.toString()) | |||||
| .modelRef(new ModelRef("string")) | |||||
| .parameterType("header") | |||||
| .required(false) // 改为false,让Swagger UI可以正常访问 | .required(false) // 改为false,让Swagger UI可以正常访问 | ||||
| .query(param -> param.model(model -> model.scalarModel(ScalarType.STRING))) | |||||
| .build(); | .build(); | ||||
| parameters.add(akParam); | parameters.add(akParam); | ||||
| // Timestamp - 在Swagger中设为非必需,便于测试 | // Timestamp - 在Swagger中设为非必需,便于测试 | ||||
| RequestParameter timestampParam = new RequestParameterBuilder() | |||||
| Parameter timestampParam = new ParameterBuilder() | |||||
| .name("timestamp") | .name("timestamp") | ||||
| .description("时间戳 (毫秒) - 必填") | .description("时间戳 (毫秒) - 必填") | ||||
| .in(ParameterType.HEADER.toString()) | |||||
| .modelRef(new ModelRef("string")) | |||||
| .parameterType("header") | |||||
| .required(false) // 改为false,让Swagger UI可以正常访问 | .required(false) // 改为false,让Swagger UI可以正常访问 | ||||
| .query(param -> param.model(model -> model.scalarModel(ScalarType.STRING))) | |||||
| .build(); | .build(); | ||||
| parameters.add(timestampParam); | parameters.add(timestampParam); | ||||
| // Signature - 在Swagger中设为非必需,便于测试 | // Signature - 在Swagger中设为非必需,便于测试 | ||||
| RequestParameter signatureParam = new RequestParameterBuilder() | |||||
| Parameter signatureParam = new ParameterBuilder() | |||||
| .name("signature") | .name("signature") | ||||
| .description("签名 (MD5(ak + sk + timestamp)) - 必填") | .description("签名 (MD5(ak + sk + timestamp)) - 必填") | ||||
| .in(ParameterType.HEADER.toString()) | |||||
| .modelRef(new ModelRef("string")) | |||||
| .parameterType("header") | |||||
| .required(false) // 改为false,让Swagger UI可以正常访问 | .required(false) // 改为false,让Swagger UI可以正常访问 | ||||
| .query(param -> param.model(model -> model.scalarModel(ScalarType.STRING))) | |||||
| .build(); | .build(); | ||||
| parameters.add(signatureParam); | parameters.add(signatureParam); | ||||
| return parameters; | return parameters; | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -0,0 +1,20 @@ | |||||
| package com.example.webapi.config; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.boot.CommandLineRunner; | |||||
| import org.springframework.stereotype.Component; | |||||
| @Component | |||||
| public class SwaggerTestConfig implements CommandLineRunner { | |||||
| private static final Logger logger = LoggerFactory.getLogger(SwaggerTestConfig.class); | |||||
| @Override | |||||
| public void run(String... args) throws Exception { | |||||
| logger.info("=== Swagger配置测试 ==="); | |||||
| logger.info("Swagger UI地址: http://localhost:8806/fuquanapi/swagger-ui.html"); | |||||
| logger.info("API文档地址: http://localhost:8806/fuquanapi/v2/api-docs"); | |||||
| logger.info("Swagger配置测试完成"); | |||||
| } | |||||
| } | |||||
| @@ -7,10 +7,7 @@ import com.example.webapi.dto.ApiResponse; | |||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
| import io.swagger.annotations.ApiParam; | import io.swagger.annotations.ApiParam; | ||||
| import io.swagger.v3.oas.annotations.media.Content; | |||||
| import io.swagger.v3.oas.annotations.media.Schema; | |||||
| import io.swagger.v3.oas.annotations.responses.ApiResponses; | |||||
| import io.swagger.v3.oas.annotations.tags.Tag; | |||||
| import io.swagger.annotations.ApiResponses; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.data.domain.Page; | import org.springframework.data.domain.Page; | ||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
| @@ -18,7 +15,6 @@ import org.springframework.web.bind.annotation.*; | |||||
| import java.util.Optional; | import java.util.Optional; | ||||
| @Api(tags = "供应标识品种信息管理") | @Api(tags = "供应标识品种信息管理") | ||||
| @Tag(name = "供应标识品种信息管理", description = "提供供应标识品种信息的增删改查接口") | |||||
| @RestController | @RestController | ||||
| @RequestMapping("/supply-variety") | @RequestMapping("/supply-variety") | ||||
| public class SupplyVarietyController { | public class SupplyVarietyController { | ||||
| @@ -28,10 +24,8 @@ public class SupplyVarietyController { | |||||
| @ApiOperation(value = "条件查询供应标识品种信息(分页)", notes = "根据提供的查询条件分页查询供应标识品种信息") | @ApiOperation(value = "条件查询供应标识品种信息(分页)", notes = "根据提供的查询条件分页查询供应标识品种信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping("/page/conditions") | @PostMapping("/page/conditions") | ||||
| public ApiResponse<Page<SupplyVariety>> pageByConditions( | public ApiResponse<Page<SupplyVariety>> pageByConditions( | ||||
| @@ -42,11 +36,9 @@ public class SupplyVarietyController { | |||||
| @ApiOperation(value = "根据ID查询供应标识品种信息", notes = "根据ID获取单条供应标识品种信息详情") | @ApiOperation(value = "根据ID查询供应标识品种信息", notes = "根据ID获取单条供应标识品种信息详情") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @GetMapping("/{id}") | @GetMapping("/{id}") | ||||
| public ApiResponse<SupplyVariety> getById( | public ApiResponse<SupplyVariety> getById( | ||||
| @@ -58,11 +50,9 @@ public class SupplyVarietyController { | |||||
| @ApiOperation(value = "新增供应标识品种信息", notes = "创建新的供应标识品种信息") | @ApiOperation(value = "新增供应标识品种信息", notes = "创建新的供应标识品种信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "创建成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "创建成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping | @PostMapping | ||||
| public ApiResponse<SupplyVariety> create( | public ApiResponse<SupplyVariety> create( | ||||
| @@ -73,17 +63,15 @@ public class SupplyVarietyController { | |||||
| @ApiOperation(value = "更新供应标识品种信息", notes = "根据ID更新供应标识品种信息") | @ApiOperation(value = "更新供应标识品种信息", notes = "根据ID更新供应标识品种信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "更新成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "更新成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PutMapping("/{id}") | @PutMapping("/{id}") | ||||
| public ApiResponse<SupplyVariety> update( | public ApiResponse<SupplyVariety> update( | ||||
| @ApiParam(value = "供应标识品种ID", required = true, example = "1") | @ApiParam(value = "供应标识品种ID", required = true, example = "1") | ||||
| @PathVariable Integer id, | |||||
| @PathVariable Integer id, | |||||
| @ApiParam(value = "更新后的供应标识品种实体", required = true) | @ApiParam(value = "更新后的供应标识品种实体", required = true) | ||||
| @RequestBody SupplyVariety entity) { | @RequestBody SupplyVariety entity) { | ||||
| entity.setId(id); | entity.setId(id); | ||||
| @@ -92,11 +80,9 @@ public class SupplyVarietyController { | |||||
| @ApiOperation(value = "删除供应标识品种信息", notes = "根据ID删除供应标识品种信息") | @ApiOperation(value = "删除供应标识品种信息", notes = "根据ID删除供应标识品种信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "删除成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "删除成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @DeleteMapping("/{id}") | @DeleteMapping("/{id}") | ||||
| public ApiResponse<Void> delete( | public ApiResponse<Void> delete( | ||||
| @@ -7,10 +7,7 @@ import com.example.webapi.dto.ApiResponse; | |||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
| import io.swagger.annotations.ApiParam; | import io.swagger.annotations.ApiParam; | ||||
| import io.swagger.v3.oas.annotations.media.Content; | |||||
| import io.swagger.v3.oas.annotations.media.Schema; | |||||
| import io.swagger.v3.oas.annotations.responses.ApiResponses; | |||||
| import io.swagger.v3.oas.annotations.tags.Tag; | |||||
| import io.swagger.annotations.ApiResponses; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.data.domain.Page; | import org.springframework.data.domain.Page; | ||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
| @@ -18,7 +15,6 @@ import org.springframework.web.bind.annotation.*; | |||||
| import java.util.Optional; | import java.util.Optional; | ||||
| @Api(tags = "转运记录管理") | @Api(tags = "转运记录管理") | ||||
| @Tag(name = "转运记录管理", description = "提供转运记录的增删改查接口") | |||||
| @RestController | @RestController | ||||
| @RequestMapping("/transfer-record") | @RequestMapping("/transfer-record") | ||||
| public class TransferRecordController { | public class TransferRecordController { | ||||
| @@ -28,10 +24,8 @@ public class TransferRecordController { | |||||
| @ApiOperation(value = "条件查询转运记录(分页)", notes = "根据提供的查询条件分页查询转运记录") | @ApiOperation(value = "条件查询转运记录(分页)", notes = "根据提供的查询条件分页查询转运记录") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping("/page/conditions") | @PostMapping("/page/conditions") | ||||
| public ApiResponse<Page<TransferRecord>> pageByConditions( | public ApiResponse<Page<TransferRecord>> pageByConditions( | ||||
| @@ -43,11 +37,9 @@ public class TransferRecordController { | |||||
| @ApiOperation(value = "根据ID查询转运记录", notes = "根据ID获取单条转运记录详情") | @ApiOperation(value = "根据ID查询转运记录", notes = "根据ID获取单条转运记录详情") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @GetMapping("/{id}") | @GetMapping("/{id}") | ||||
| public ApiResponse<TransferRecord> getById( | public ApiResponse<TransferRecord> getById( | ||||
| @@ -59,11 +51,9 @@ public class TransferRecordController { | |||||
| @ApiOperation(value = "新增转运记录", notes = "创建新的转运记录") | @ApiOperation(value = "新增转运记录", notes = "创建新的转运记录") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "创建成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "创建成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping | @PostMapping | ||||
| public ApiResponse<TransferRecord> create( | public ApiResponse<TransferRecord> create( | ||||
| @@ -74,12 +64,10 @@ public class TransferRecordController { | |||||
| @ApiOperation(value = "更新转运记录", notes = "根据ID更新转运记录信息") | @ApiOperation(value = "更新转运记录", notes = "根据ID更新转运记录信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "更新成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "更新成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PutMapping("/{id}") | @PutMapping("/{id}") | ||||
| public ApiResponse<TransferRecord> update( | public ApiResponse<TransferRecord> update( | ||||
| @@ -93,11 +81,9 @@ public class TransferRecordController { | |||||
| @ApiOperation(value = "删除转运记录", notes = "根据ID删除转运记录") | @ApiOperation(value = "删除转运记录", notes = "根据ID删除转运记录") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "删除成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "删除成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @DeleteMapping("/{id}") | @DeleteMapping("/{id}") | ||||
| public ApiResponse<Void> delete( | public ApiResponse<Void> delete( | ||||
| @@ -7,10 +7,7 @@ import com.example.webapi.dto.ApiResponse; | |||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
| import io.swagger.annotations.ApiParam; | import io.swagger.annotations.ApiParam; | ||||
| import io.swagger.v3.oas.annotations.media.Content; | |||||
| import io.swagger.v3.oas.annotations.media.Schema; | |||||
| import io.swagger.v3.oas.annotations.responses.ApiResponses; | |||||
| import io.swagger.v3.oas.annotations.tags.Tag; | |||||
| import io.swagger.annotations.ApiResponses; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.data.domain.Page; | import org.springframework.data.domain.Page; | ||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
| @@ -18,7 +15,6 @@ import org.springframework.web.bind.annotation.*; | |||||
| import java.util.Optional; | import java.util.Optional; | ||||
| @Api(tags = "运输公司管理") | @Api(tags = "运输公司管理") | ||||
| @Tag(name = "运输公司管理", description = "提供运输公司的增删改查接口") | |||||
| @RestController | @RestController | ||||
| @RequestMapping("/transport-company") | @RequestMapping("/transport-company") | ||||
| public class TransportCompanyController { | public class TransportCompanyController { | ||||
| @@ -28,10 +24,8 @@ public class TransportCompanyController { | |||||
| @ApiOperation(value = "条件查询运输公司(分页)", notes = "根据提供的查询条件分页查询运输公司") | @ApiOperation(value = "条件查询运输公司(分页)", notes = "根据提供的查询条件分页查询运输公司") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping("/page/conditions") | @PostMapping("/page/conditions") | ||||
| public ApiResponse<Page<TransportCompany>> pageByConditions( | public ApiResponse<Page<TransportCompany>> pageByConditions( | ||||
| @@ -42,11 +36,9 @@ public class TransportCompanyController { | |||||
| @ApiOperation(value = "根据ID查询运输公司", notes = "根据ID获取单条运输公司详情") | @ApiOperation(value = "根据ID查询运输公司", notes = "根据ID获取单条运输公司详情") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @GetMapping("/{id}") | @GetMapping("/{id}") | ||||
| public ApiResponse<TransportCompany> getById( | public ApiResponse<TransportCompany> getById( | ||||
| @@ -58,11 +50,9 @@ public class TransportCompanyController { | |||||
| @ApiOperation(value = "新增运输公司", notes = "创建新的运输公司") | @ApiOperation(value = "新增运输公司", notes = "创建新的运输公司") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "创建成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "创建成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping | @PostMapping | ||||
| public ApiResponse<TransportCompany> create( | public ApiResponse<TransportCompany> create( | ||||
| @@ -73,12 +63,10 @@ public class TransportCompanyController { | |||||
| @ApiOperation(value = "更新运输公司", notes = "根据ID更新运输公司信息") | @ApiOperation(value = "更新运输公司", notes = "根据ID更新运输公司信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "更新成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "更新成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PutMapping("/{id}") | @PutMapping("/{id}") | ||||
| public ApiResponse<TransportCompany> update( | public ApiResponse<TransportCompany> update( | ||||
| @@ -92,11 +80,9 @@ public class TransportCompanyController { | |||||
| @ApiOperation(value = "删除运输公司", notes = "根据ID删除运输公司") | @ApiOperation(value = "删除运输公司", notes = "根据ID删除运输公司") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "删除成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "删除成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @DeleteMapping("/{id}") | @DeleteMapping("/{id}") | ||||
| public ApiResponse<Void> delete( | public ApiResponse<Void> delete( | ||||
| @@ -0,0 +1,82 @@ | |||||
| package com.example.webapi.controller; | |||||
| import com.example.webapi.dto.TwiceWeighingQueryDTO; | |||||
| import com.example.webapi.entity.TwiceWeighing; | |||||
| import com.example.webapi.service.TwiceWeighingService; | |||||
| import com.example.webapi.dto.ApiResponse; | |||||
| import io.swagger.annotations.Api; | |||||
| import io.swagger.annotations.ApiOperation; | |||||
| import io.swagger.annotations.ApiParam; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.data.domain.Page; | |||||
| import org.springframework.web.bind.annotation.*; | |||||
| import java.util.Optional; | |||||
| @Api(tags = "二次称重记录管理") | |||||
| @RestController | |||||
| @RequestMapping("/twice-weighing") | |||||
| public class TwiceWeighingController { | |||||
| @Autowired | |||||
| private TwiceWeighingService service; | |||||
| @ApiOperation(value = "条件查询二次称重记录(分页)", notes = "根据提供的查询条件分页查询二次称重记录") | |||||
| @PostMapping("/page/conditions") | |||||
| public ApiResponse<Page<TwiceWeighing>> pageByConditions(@RequestBody TwiceWeighingQueryDTO queryDTO) { | |||||
| return ApiResponse.success(service.findByConditions(queryDTO)); | |||||
| } | |||||
| @ApiOperation(value = "根据ID查询二次称重记录", notes = "根据ID获取单条二次称重记录详情") | |||||
| @GetMapping("/{id}") | |||||
| public ApiResponse<TwiceWeighing> getById(@PathVariable String id) { | |||||
| Optional<TwiceWeighing> result = service.findById(id); | |||||
| return result.map(ApiResponse::success).orElseGet(() -> ApiResponse.error("未找到该二次称重记录")); | |||||
| } | |||||
| @ApiOperation(value = "新增二次称重记录", notes = "创建新的二次称重记录") | |||||
| @PostMapping | |||||
| public ApiResponse<TwiceWeighing> create(@RequestBody TwiceWeighing entity) { | |||||
| return ApiResponse.success(service.save(entity)); | |||||
| } | |||||
| @ApiOperation(value = "更新二次称重记录", notes = "根据ID更新二次称重记录信息") | |||||
| @PutMapping("/{id}") | |||||
| public ApiResponse<TwiceWeighing> update(@PathVariable String id, @RequestBody TwiceWeighing entity) { | |||||
| entity.setId(id); | |||||
| return ApiResponse.success(service.save(entity)); | |||||
| } | |||||
| @ApiOperation(value = "删除二次称重记录", notes = "根据ID删除二次称重记录") | |||||
| @DeleteMapping("/{id}") | |||||
| public ApiResponse<Void> delete(@PathVariable String id) { | |||||
| service.deleteById(id); | |||||
| return ApiResponse.success(); | |||||
| } | |||||
| @ApiOperation(value = "根据车号查询二次称重记录", notes = "根据车号获取二次称重记录") | |||||
| @GetMapping("/vehicle/{vehicleId}") | |||||
| public ApiResponse<TwiceWeighing> getByVehicleId(@PathVariable String vehicleId) { | |||||
| TwiceWeighing result = service.findByVehicleId(vehicleId); | |||||
| return result != null ? ApiResponse.success(result) : ApiResponse.error("未找到该车号的记录"); | |||||
| } | |||||
| @ApiOperation(value = "根据打印编号查询二次称重记录", notes = "根据打印编号获取二次称重记录") | |||||
| @GetMapping("/print/{printId}") | |||||
| public ApiResponse<TwiceWeighing> getByPrintId(@PathVariable String printId) { | |||||
| TwiceWeighing result = service.findByPrintId(printId); | |||||
| return result != null ? ApiResponse.success(result) : ApiResponse.error("未找到该打印编号的记录"); | |||||
| } | |||||
| @ApiOperation(value = "获取上传记录数量", notes = "根据上传标识获取记录数量") | |||||
| @GetMapping("/count/upload/{uploadFlag}") | |||||
| public ApiResponse<Long> countByUploadFlag(@PathVariable Boolean uploadFlag) { | |||||
| return ApiResponse.success(service.countByUploadFlag(uploadFlag)); | |||||
| } | |||||
| @ApiOperation(value = "获取作废记录数量", notes = "根据作废标识获取记录数量") | |||||
| @GetMapping("/count/useless/{uselessFlag}") | |||||
| public ApiResponse<Long> countByUselessFlag(@PathVariable Boolean uselessFlag) { | |||||
| return ApiResponse.success(service.countByUselessFlag(uselessFlag)); | |||||
| } | |||||
| } | |||||
| @@ -7,10 +7,7 @@ import com.example.webapi.dto.ApiResponse; | |||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
| import io.swagger.annotations.ApiParam; | import io.swagger.annotations.ApiParam; | ||||
| import io.swagger.v3.oas.annotations.media.Content; | |||||
| import io.swagger.v3.oas.annotations.media.Schema; | |||||
| import io.swagger.v3.oas.annotations.responses.ApiResponses; | |||||
| import io.swagger.v3.oas.annotations.tags.Tag; | |||||
| import io.swagger.annotations.ApiResponses; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.data.domain.Page; | import org.springframework.data.domain.Page; | ||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
| @@ -18,7 +15,6 @@ import org.springframework.web.bind.annotation.*; | |||||
| import java.util.Optional; | import java.util.Optional; | ||||
| @Api(tags = "车辆信息管理") | @Api(tags = "车辆信息管理") | ||||
| @Tag(name = "车辆信息管理", description = "提供车辆信息的增删改查接口") | |||||
| @RestController | @RestController | ||||
| @RequestMapping("/vehicle-info") | @RequestMapping("/vehicle-info") | ||||
| public class VehicleInfoController { | public class VehicleInfoController { | ||||
| @@ -28,10 +24,8 @@ public class VehicleInfoController { | |||||
| @ApiOperation(value = "条件查询车辆信息(分页)", notes = "根据提供的查询条件分页查询车辆信息") | @ApiOperation(value = "条件查询车辆信息(分页)", notes = "根据提供的查询条件分页查询车辆信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping("/page/conditions") | @PostMapping("/page/conditions") | ||||
| public ApiResponse<Page<VehicleInfo>> pageByConditions( | public ApiResponse<Page<VehicleInfo>> pageByConditions( | ||||
| @@ -42,11 +36,9 @@ public class VehicleInfoController { | |||||
| @ApiOperation(value = "根据ID查询车辆信息", notes = "根据ID获取单条车辆信息详情") | @ApiOperation(value = "根据ID查询车辆信息", notes = "根据ID获取单条车辆信息详情") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @GetMapping("/{id}") | @GetMapping("/{id}") | ||||
| public ApiResponse<VehicleInfo> getById( | public ApiResponse<VehicleInfo> getById( | ||||
| @@ -58,11 +50,9 @@ public class VehicleInfoController { | |||||
| @ApiOperation(value = "新增车辆信息", notes = "创建新的车辆信息") | @ApiOperation(value = "新增车辆信息", notes = "创建新的车辆信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "创建成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "创建成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping | @PostMapping | ||||
| public ApiResponse<VehicleInfo> create( | public ApiResponse<VehicleInfo> create( | ||||
| @@ -73,12 +63,10 @@ public class VehicleInfoController { | |||||
| @ApiOperation(value = "更新车辆信息", notes = "根据ID更新车辆信息") | @ApiOperation(value = "更新车辆信息", notes = "根据ID更新车辆信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "更新成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "更新成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PutMapping("/{id}") | @PutMapping("/{id}") | ||||
| public ApiResponse<VehicleInfo> update( | public ApiResponse<VehicleInfo> update( | ||||
| @@ -92,11 +80,9 @@ public class VehicleInfoController { | |||||
| @ApiOperation(value = "删除车辆信息", notes = "根据ID删除车辆信息") | @ApiOperation(value = "删除车辆信息", notes = "根据ID删除车辆信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "删除成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "删除成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @DeleteMapping("/{id}") | @DeleteMapping("/{id}") | ||||
| public ApiResponse<Void> delete( | public ApiResponse<Void> delete( | ||||
| @@ -9,10 +9,7 @@ import com.example.webapi.dto.ApiResponse; | |||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
| import io.swagger.annotations.ApiParam; | import io.swagger.annotations.ApiParam; | ||||
| import io.swagger.v3.oas.annotations.media.Content; | |||||
| import io.swagger.v3.oas.annotations.media.Schema; | |||||
| import io.swagger.v3.oas.annotations.responses.ApiResponses; | |||||
| import io.swagger.v3.oas.annotations.tags.Tag; | |||||
| import io.swagger.annotations.ApiResponses; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.data.domain.Page; | import org.springframework.data.domain.Page; | ||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
| @@ -20,7 +17,6 @@ import org.springframework.web.bind.annotation.*; | |||||
| import java.util.Optional; | import java.util.Optional; | ||||
| @Api(tags = "称重记录管理") | @Api(tags = "称重记录管理") | ||||
| @Tag(name = "称重记录管理", description = "提供称重记录的增删改查接口") | |||||
| @RestController | @RestController | ||||
| @RequestMapping("/weighing-record") | @RequestMapping("/weighing-record") | ||||
| public class WeighingRecordController { | public class WeighingRecordController { | ||||
| @@ -33,10 +29,8 @@ public class WeighingRecordController { | |||||
| @ApiOperation(value = "条件查询称重记录(分页)", notes = "根据提供的查询条件分页查询称重记录") | @ApiOperation(value = "条件查询称重记录(分页)", notes = "根据提供的查询条件分页查询称重记录") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping("/page/conditions") | @PostMapping("/page/conditions") | ||||
| public ApiResponse<Page<WeighingRecord>> pageByConditions( | public ApiResponse<Page<WeighingRecord>> pageByConditions( | ||||
| @@ -47,11 +41,9 @@ public class WeighingRecordController { | |||||
| @ApiOperation(value = "根据ID查询称重记录", notes = "根据ID获取单条称重记录详情") | @ApiOperation(value = "根据ID查询称重记录", notes = "根据ID获取单条称重记录详情") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "查询成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "查询成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @GetMapping("/{id}") | @GetMapping("/{id}") | ||||
| public ApiResponse<WeighingRecord> getById( | public ApiResponse<WeighingRecord> getById( | ||||
| @@ -64,11 +56,9 @@ public class WeighingRecordController { | |||||
| @ApiOperation(value = "新增称重记录", notes = "创建新的称重记录") | @ApiOperation(value = "新增称重记录", notes = "创建新的称重记录") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "创建成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "创建成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PostMapping | @PostMapping | ||||
| public ApiResponse<WeighingRecord> create( | public ApiResponse<WeighingRecord> create( | ||||
| @@ -90,12 +80,10 @@ public class WeighingRecordController { | |||||
| @ApiOperation(value = "更新称重记录", notes = "根据ID更新称重记录信息") | @ApiOperation(value = "更新称重记录", notes = "根据ID更新称重记录信息") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "更新成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "请求参数错误"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "更新成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 400, message = "请求参数错误"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @PutMapping("/{id}") | @PutMapping("/{id}") | ||||
| public ApiResponse<WeighingRecord> update( | public ApiResponse<WeighingRecord> update( | ||||
| @@ -109,11 +97,9 @@ public class WeighingRecordController { | |||||
| @ApiOperation(value = "删除称重记录", notes = "根据ID删除称重记录") | @ApiOperation(value = "删除称重记录", notes = "根据ID删除称重记录") | ||||
| @ApiResponses(value = { | @ApiResponses(value = { | ||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "删除成功", | |||||
| content = @Content(mediaType = "application/json", | |||||
| schema = @Schema(implementation = com.example.webapi.dto.ApiResponse.class))), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "404", description = "记录不存在"), | |||||
| @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "500", description = "服务器内部错误") | |||||
| @io.swagger.annotations.ApiResponse(code = 200, message = "删除成功"), | |||||
| @io.swagger.annotations.ApiResponse(code = 404, message = "记录不存在"), | |||||
| @io.swagger.annotations.ApiResponse(code = 500, message = "服务器内部错误") | |||||
| }) | }) | ||||
| @DeleteMapping("/{id}") | @DeleteMapping("/{id}") | ||||
| public ApiResponse<Void> delete( | public ApiResponse<Void> delete( | ||||
| @@ -0,0 +1,248 @@ | |||||
| package com.example.webapi.dto; | |||||
| import io.swagger.annotations.ApiModel; | |||||
| import io.swagger.annotations.ApiModelProperty; | |||||
| /** | |||||
| * 二次称重记录查询条件DTO | |||||
| * | |||||
| * @author Your Name | |||||
| * @version 1.0.0 | |||||
| */ | |||||
| @ApiModel(description = "二次称重记录查询条件数据传输对象") | |||||
| public class TwiceWeighingQueryDTO extends BasePageDTO { | |||||
| // 基础查询条件(支持模糊查询) | |||||
| @ApiModelProperty(value = "车号", example = "京A12345") | |||||
| private String vehicleId; | |||||
| @ApiModelProperty(value = "车型", example = "货车") | |||||
| private String vehicleType; | |||||
| @ApiModelProperty(value = "货物", example = "煤炭") | |||||
| private String goods; | |||||
| @ApiModelProperty(value = "收货单位", example = "福泉电厂") | |||||
| private String receiveUnit; | |||||
| @ApiModelProperty(value = "发货单位", example = "福泉煤矿") | |||||
| private String sendUnit; | |||||
| @ApiModelProperty(value = "发货站", example = "福泉站") | |||||
| private String sendStation; | |||||
| @ApiModelProperty(value = "到站", example = "电厂站") | |||||
| private String theStation; | |||||
| @ApiModelProperty(value = "炉号", example = "F001") | |||||
| private String furnaceNumber; | |||||
| @ApiModelProperty(value = "铁号", example = "I001") | |||||
| private String ironNumber; | |||||
| @ApiModelProperty(value = "方向", example = "进厂") | |||||
| private String direction; | |||||
| @ApiModelProperty(value = "毛重操作员ID", example = "OP001") | |||||
| private String grossOpId; | |||||
| @ApiModelProperty(value = "皮重操作员ID", example = "OP002") | |||||
| private String tareOpId; | |||||
| @ApiModelProperty(value = "打印编号", example = "PRINT001") | |||||
| private String printId; | |||||
| @ApiModelProperty(value = "备注", example = "正常称重") | |||||
| private String demo; | |||||
| // 精确匹配查询 | |||||
| @ApiModelProperty(value = "物资ID", example = "1") | |||||
| private Integer materialsId; | |||||
| @ApiModelProperty(value = "供应商ID", example = "1") | |||||
| private Integer supplierId; | |||||
| @ApiModelProperty(value = "上传标志", example = "false") | |||||
| private Boolean uploadFlag; | |||||
| @ApiModelProperty(value = "作废标志", example = "false") | |||||
| private Boolean uselessFlag; | |||||
| @ApiModelProperty(value = "皮重模式", example = "手动") | |||||
| private String tareModel; | |||||
| @ApiModelProperty(value = "毛重衡器ID", example = "GS001") | |||||
| private String grossScaleId; | |||||
| @ApiModelProperty(value = "皮重衡器ID", example = "TS001") | |||||
| private String tareScaleId; | |||||
| // Getter and Setter methods | |||||
| public String getVehicleId() { | |||||
| return vehicleId; | |||||
| } | |||||
| public void setVehicleId(String vehicleId) { | |||||
| this.vehicleId = vehicleId; | |||||
| } | |||||
| public String getVehicleType() { | |||||
| return vehicleType; | |||||
| } | |||||
| public void setVehicleType(String vehicleType) { | |||||
| this.vehicleType = vehicleType; | |||||
| } | |||||
| public String getGoods() { | |||||
| return goods; | |||||
| } | |||||
| public void setGoods(String goods) { | |||||
| this.goods = goods; | |||||
| } | |||||
| public String getReceiveUnit() { | |||||
| return receiveUnit; | |||||
| } | |||||
| public void setReceiveUnit(String receiveUnit) { | |||||
| this.receiveUnit = receiveUnit; | |||||
| } | |||||
| public String getSendUnit() { | |||||
| return sendUnit; | |||||
| } | |||||
| public void setSendUnit(String sendUnit) { | |||||
| this.sendUnit = sendUnit; | |||||
| } | |||||
| public String getSendStation() { | |||||
| return sendStation; | |||||
| } | |||||
| public void setSendStation(String sendStation) { | |||||
| this.sendStation = sendStation; | |||||
| } | |||||
| public String getTheStation() { | |||||
| return theStation; | |||||
| } | |||||
| public void setTheStation(String theStation) { | |||||
| this.theStation = theStation; | |||||
| } | |||||
| public String getFurnaceNumber() { | |||||
| return furnaceNumber; | |||||
| } | |||||
| public void setFurnaceNumber(String furnaceNumber) { | |||||
| this.furnaceNumber = furnaceNumber; | |||||
| } | |||||
| public String getIronNumber() { | |||||
| return ironNumber; | |||||
| } | |||||
| public void setIronNumber(String ironNumber) { | |||||
| this.ironNumber = ironNumber; | |||||
| } | |||||
| public String getDirection() { | |||||
| return direction; | |||||
| } | |||||
| public void setDirection(String direction) { | |||||
| this.direction = direction; | |||||
| } | |||||
| public String getGrossOpId() { | |||||
| return grossOpId; | |||||
| } | |||||
| public void setGrossOpId(String grossOpId) { | |||||
| this.grossOpId = grossOpId; | |||||
| } | |||||
| public String getTareOpId() { | |||||
| return tareOpId; | |||||
| } | |||||
| public void setTareOpId(String tareOpId) { | |||||
| this.tareOpId = tareOpId; | |||||
| } | |||||
| public String getPrintId() { | |||||
| return printId; | |||||
| } | |||||
| public void setPrintId(String printId) { | |||||
| this.printId = printId; | |||||
| } | |||||
| public String getDemo() { | |||||
| return demo; | |||||
| } | |||||
| public void setDemo(String demo) { | |||||
| this.demo = demo; | |||||
| } | |||||
| public Integer getMaterialsId() { | |||||
| return materialsId; | |||||
| } | |||||
| public void setMaterialsId(Integer materialsId) { | |||||
| this.materialsId = materialsId; | |||||
| } | |||||
| public Integer getSupplierId() { | |||||
| return supplierId; | |||||
| } | |||||
| public void setSupplierId(Integer supplierId) { | |||||
| this.supplierId = supplierId; | |||||
| } | |||||
| public Boolean getUploadFlag() { | |||||
| return uploadFlag; | |||||
| } | |||||
| public void setUploadFlag(Boolean uploadFlag) { | |||||
| this.uploadFlag = uploadFlag; | |||||
| } | |||||
| public Boolean getUselessFlag() { | |||||
| return uselessFlag; | |||||
| } | |||||
| public void setUselessFlag(Boolean uselessFlag) { | |||||
| this.uselessFlag = uselessFlag; | |||||
| } | |||||
| public String getTareModel() { | |||||
| return tareModel; | |||||
| } | |||||
| public void setTareModel(String tareModel) { | |||||
| this.tareModel = tareModel; | |||||
| } | |||||
| public String getGrossScaleId() { | |||||
| return grossScaleId; | |||||
| } | |||||
| public void setGrossScaleId(String grossScaleId) { | |||||
| this.grossScaleId = grossScaleId; | |||||
| } | |||||
| public String getTareScaleId() { | |||||
| return tareScaleId; | |||||
| } | |||||
| public void setTareScaleId(String tareScaleId) { | |||||
| this.tareScaleId = tareScaleId; | |||||
| } | |||||
| } | |||||
| @@ -11,6 +11,7 @@ import javax.persistence.*; | |||||
| @ApiModel(description = "品种信息实体") | @ApiModel(description = "品种信息实体") | ||||
| public class MaterialInfo { | public class MaterialInfo { | ||||
| @Id | @Id | ||||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | |||||
| @Column(name = "ID") | @Column(name = "ID") | ||||
| @ApiModelProperty(value = "品种ID", example = "1", notes = "主键,自动生成") | @ApiModelProperty(value = "品种ID", example = "1", notes = "主键,自动生成") | ||||
| private Integer id; | private Integer id; | ||||
| @@ -26,4 +27,4 @@ public class MaterialInfo { | |||||
| @Column(name = "Activate", nullable = false) | @Column(name = "Activate", nullable = false) | ||||
| @ApiModelProperty(value = "激活状态", example = "true", notes = "true=激活,false=未激活") | @ApiModelProperty(value = "激活状态", example = "true", notes = "true=激活,false=未激活") | ||||
| private Boolean activate; | private Boolean activate; | ||||
| } | |||||
| } | |||||
| @@ -11,6 +11,7 @@ import javax.persistence.*; | |||||
| @ApiModel(description = "供应商信息实体") | @ApiModel(description = "供应商信息实体") | ||||
| public class Supplier { | public class Supplier { | ||||
| @Id | @Id | ||||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | |||||
| @Column(name = "ID") | @Column(name = "ID") | ||||
| @ApiModelProperty(value = "供应商ID", example = "1", notes = "主键,自动生成") | @ApiModelProperty(value = "供应商ID", example = "1", notes = "主键,自动生成") | ||||
| private Integer id; | private Integer id; | ||||
| @@ -11,6 +11,7 @@ import javax.persistence.*; | |||||
| @ApiModel(description = "供应标识品种信息实体") | @ApiModel(description = "供应标识品种信息实体") | ||||
| public class SupplyVariety { | public class SupplyVariety { | ||||
| @Id | @Id | ||||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | |||||
| @Column(name = "ID") | @Column(name = "ID") | ||||
| @ApiModelProperty(value = "记录ID", example = "1", notes = "主键,自动生成") | @ApiModelProperty(value = "记录ID", example = "1", notes = "主键,自动生成") | ||||
| private Integer id; | private Integer id; | ||||
| @@ -26,4 +27,4 @@ public class SupplyVariety { | |||||
| @Column(name = "Active") | @Column(name = "Active") | ||||
| @ApiModelProperty(value = "激活状态", example = "true", notes = "true=激活,false=未激活") | @ApiModelProperty(value = "激活状态", example = "true", notes = "true=激活,false=未激活") | ||||
| private Boolean active; | private Boolean active; | ||||
| } | |||||
| } | |||||
| @@ -13,6 +13,7 @@ import java.util.Date; | |||||
| @ApiModel(description = "转运记录实体") | @ApiModel(description = "转运记录实体") | ||||
| public class TransferRecord { | public class TransferRecord { | ||||
| @Id | @Id | ||||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | |||||
| @Column(name = "ID") | @Column(name = "ID") | ||||
| @ApiModelProperty(value = "记录ID", example = "1", notes = "主键,自动生成") | @ApiModelProperty(value = "记录ID", example = "1", notes = "主键,自动生成") | ||||
| private Integer id; | private Integer id; | ||||
| @@ -11,6 +11,7 @@ import javax.persistence.*; | |||||
| @ApiModel(description = "运输公司实体") | @ApiModel(description = "运输公司实体") | ||||
| public class TransportCompany { | public class TransportCompany { | ||||
| @Id | @Id | ||||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | |||||
| @Column(name = "编号") | @Column(name = "编号") | ||||
| @ApiModelProperty(value = "公司ID", example = "1", notes = "主键,自动生成") | @ApiModelProperty(value = "公司ID", example = "1", notes = "主键,自动生成") | ||||
| private Integer id; | private Integer id; | ||||
| @@ -22,4 +23,4 @@ public class TransportCompany { | |||||
| @Column(name = "备注", length = 300) | @Column(name = "备注", length = 300) | ||||
| @ApiModelProperty(value = "备注", example = "长期合作伙伴") | @ApiModelProperty(value = "备注", example = "长期合作伙伴") | ||||
| private String remark; | private String remark; | ||||
| } | |||||
| } | |||||
| @@ -0,0 +1,144 @@ | |||||
| package com.example.webapi.entity; | |||||
| import io.swagger.annotations.ApiModel; | |||||
| import io.swagger.annotations.ApiModelProperty; | |||||
| import lombok.Data; | |||||
| import javax.persistence.*; | |||||
| import java.math.BigDecimal; | |||||
| import java.util.Date; | |||||
| @Data | |||||
| @Entity | |||||
| @Table(name = "TB_TWICEWEIGHING") | |||||
| public class TwiceWeighing { | |||||
| @Id | |||||
| @Column(name = "ID", length = 22, nullable = false) | |||||
| private String id; | |||||
| @Column(name = "VEHICLETYPE", length = 10) | |||||
| private String vehicleType; | |||||
| @Column(name = "VEHICLEID", length = 10) | |||||
| private String vehicleId; | |||||
| @Column(name = "GROSS", precision = 18, scale = 3) | |||||
| private BigDecimal gross; | |||||
| @Column(name = "TARE", precision = 18, scale = 3) | |||||
| private BigDecimal tare; | |||||
| @Column(name = "NET", precision = 18, scale = 3) | |||||
| private BigDecimal net; | |||||
| @Column(name = "STANDARD", precision = 18, scale = 3) | |||||
| private BigDecimal standard; | |||||
| @Column(name = "MAXWEIGHT", precision = 18, scale = 3) | |||||
| private BigDecimal maxWeight; | |||||
| @Column(name = "OTHERNET", precision = 18, scale = 3) | |||||
| private BigDecimal otherNet; | |||||
| @Column(name = "GROSSTIME") | |||||
| private Date grossTime; | |||||
| @Column(name = "TARETIME") | |||||
| private Date tareTime; | |||||
| @Column(name = "NETTIME") | |||||
| private Date netTime; | |||||
| @Column(name = "WINTERVAL") | |||||
| private Integer winterval; | |||||
| @Column(name = "GROSSNODEID", length = 22) | |||||
| private String grossNodeId; | |||||
| @Column(name = "TARENODEID", length = 22) | |||||
| private String tareNodeId; | |||||
| @Column(name = "GROSSSCALEID", length = 10) | |||||
| private String grossScaleId; | |||||
| @Column(name = "TARESCALEID", length = 10) | |||||
| private String tareScaleId; | |||||
| @Column(name = "GROSSOPID", length = 10) | |||||
| private String grossOpId; | |||||
| @Column(name = "TAREOPID", length = 10) | |||||
| private String tareOpId; | |||||
| @Column(name = "TAREMODEL", length = 10) | |||||
| private String tareModel; | |||||
| @Column(name = "UPLOADFLAG") | |||||
| private Boolean uploadFlag; | |||||
| @Column(name = "USELESSFLAG") | |||||
| private Boolean uselessFlag; | |||||
| @Column(name = "PRINTCOUNT") | |||||
| private Integer printCount; | |||||
| @Column(name = "PRINTID", length = 30) | |||||
| private String printId; | |||||
| @Column(name = "DEMO", length = 50) | |||||
| private String demo; | |||||
| @Column(name = "MATERIALSID") | |||||
| private Integer materialsId; | |||||
| @Column(name = "SUPPLIERID") | |||||
| private Integer supplierId; | |||||
| @Column(name = "LOSSPATH") | |||||
| private Float lossPath; | |||||
| @Column(name = "WINWEIGHT") | |||||
| private Float winWeight; | |||||
| @Column(name = "LOSSWEIHGT") | |||||
| private Float lossWeight; | |||||
| @Column(name = "GROSSSPEED") | |||||
| private Float grossSpeed; | |||||
| @Column(name = "TARESPEED") | |||||
| private Float tareSpeed; | |||||
| @Column(name = "GROSSLISTID", length = 20) | |||||
| private String grossListId; | |||||
| @Column(name = "TARELISTID", length = 20) | |||||
| private String tareListId; | |||||
| @Column(name = "DELWEIGHT") | |||||
| private Float delWeight; | |||||
| @Column(name = "GOODS", length = 50) | |||||
| private String goods; | |||||
| @Column(name = "RECEIVEUNIT", length = 50) | |||||
| private String receiveUnit; | |||||
| @Column(name = "SENDUNIT", length = 50) | |||||
| private String sendUnit; | |||||
| @Column(name = "SENDSTSTION", length = 50) | |||||
| private String sendStation; | |||||
| @Column(name = "THESTATION", length = 50) | |||||
| private String theStation; | |||||
| @Column(name = "FURNACENUMBER", length = 50) | |||||
| private String furnaceNumber; | |||||
| @Column(name = "IRONNUMBER", length = 50) | |||||
| private String ironNumber; | |||||
| @Column(name = "DIRECTION", length = 50) | |||||
| private String direction; | |||||
| } | |||||
| @@ -11,6 +11,7 @@ import javax.persistence.*; | |||||
| @ApiModel(description = "车辆信息实体") | @ApiModel(description = "车辆信息实体") | ||||
| public class VehicleInfo { | public class VehicleInfo { | ||||
| @Id | @Id | ||||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | |||||
| @Column(name = "ID") | @Column(name = "ID") | ||||
| @ApiModelProperty(value = "车辆ID", example = "1", notes = "主键,自动生成") | @ApiModelProperty(value = "车辆ID", example = "1", notes = "主键,自动生成") | ||||
| private Integer id; | private Integer id; | ||||
| @@ -42,4 +43,4 @@ public class VehicleInfo { | |||||
| @Column(name = "Remarks", length = 1000) | @Column(name = "Remarks", length = 1000) | ||||
| @ApiModelProperty(value = "备注", example = "新购车辆") | @ApiModelProperty(value = "备注", example = "新购车辆") | ||||
| private String remarks; | private String remarks; | ||||
| } | |||||
| } | |||||
| @@ -13,6 +13,7 @@ import java.util.Date; | |||||
| @ApiModel(description = "称重记录实体") | @ApiModel(description = "称重记录实体") | ||||
| public class WeighingRecord { | public class WeighingRecord { | ||||
| @Id | @Id | ||||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | |||||
| @Column(name = "ID") | @Column(name = "ID") | ||||
| @ApiModelProperty(value = "记录ID", example = "1", notes = "主键,自动生成") | @ApiModelProperty(value = "记录ID", example = "1", notes = "主键,自动生成") | ||||
| private Integer id; | private Integer id; | ||||
| @@ -132,4 +133,4 @@ public class WeighingRecord { | |||||
| @Column(name = "WTId") | @Column(name = "WTId") | ||||
| @ApiModelProperty(value = "称重类型ID", example = "1") | @ApiModelProperty(value = "称重类型ID", example = "1") | ||||
| private Integer wtId; | private Integer wtId; | ||||
| } | |||||
| } | |||||
| @@ -0,0 +1,141 @@ | |||||
| package com.example.webapi.entity.postgresql; | |||||
| import lombok.Data; | |||||
| import javax.persistence.*; | |||||
| import java.math.BigDecimal; | |||||
| import java.util.Date; | |||||
| @Data | |||||
| @Entity | |||||
| @Table(name = "tb_twice_weighing") | |||||
| public class TwiceWeighingPostgreSQL { | |||||
| @Id | |||||
| @Column(name = "id", length = 22, nullable = false) | |||||
| private String id; | |||||
| @Column(name = "vehicle_type", length = 10) | |||||
| private String vehicleType; | |||||
| @Column(name = "vehicle_id", length = 10) | |||||
| private String vehicleId; | |||||
| @Column(name = "gross", precision = 18, scale = 3) | |||||
| private BigDecimal gross; | |||||
| @Column(name = "tare", precision = 18, scale = 3) | |||||
| private BigDecimal tare; | |||||
| @Column(name = "net", precision = 18, scale = 3) | |||||
| private BigDecimal net; | |||||
| @Column(name = "standard", precision = 18, scale = 3) | |||||
| private BigDecimal standard; | |||||
| @Column(name = "max_weight", precision = 18, scale = 3) | |||||
| private BigDecimal maxWeight; | |||||
| @Column(name = "other_net", precision = 18, scale = 3) | |||||
| private BigDecimal otherNet; | |||||
| @Column(name = "gross_time") | |||||
| private Date grossTime; | |||||
| @Column(name = "tare_time") | |||||
| private Date tareTime; | |||||
| @Column(name = "net_time") | |||||
| private Date netTime; | |||||
| @Column(name = "winterval") | |||||
| private Integer winterval; | |||||
| @Column(name = "gross_node_id", length = 22) | |||||
| private String grossNodeId; | |||||
| @Column(name = "tare_node_id", length = 22) | |||||
| private String tareNodeId; | |||||
| @Column(name = "gross_scale_id", length = 10) | |||||
| private String grossScaleId; | |||||
| @Column(name = "tare_scale_id", length = 10) | |||||
| private String tareScaleId; | |||||
| @Column(name = "gross_op_id", length = 10) | |||||
| private String grossOpId; | |||||
| @Column(name = "tare_op_id", length = 10) | |||||
| private String tareOpId; | |||||
| @Column(name = "tare_model", length = 10) | |||||
| private String tareModel; | |||||
| @Column(name = "upload_flag") | |||||
| private Boolean uploadFlag; | |||||
| @Column(name = "useless_flag") | |||||
| private Boolean uselessFlag; | |||||
| @Column(name = "print_count") | |||||
| private Integer printCount; | |||||
| @Column(name = "print_id", length = 30) | |||||
| private String printId; | |||||
| @Column(name = "demo", length = 50) | |||||
| private String demo; | |||||
| @Column(name = "materials_id") | |||||
| private Integer materialsId; | |||||
| @Column(name = "supplier_id") | |||||
| private Integer supplierId; | |||||
| @Column(name = "loss_path") | |||||
| private Float lossPath; | |||||
| @Column(name = "win_weight") | |||||
| private Float winWeight; | |||||
| @Column(name = "loss_weight") | |||||
| private Float lossWeight; | |||||
| @Column(name = "gross_speed") | |||||
| private Float grossSpeed; | |||||
| @Column(name = "tare_speed") | |||||
| private Float tareSpeed; | |||||
| @Column(name = "gross_list_id", length = 20) | |||||
| private String grossListId; | |||||
| @Column(name = "tare_list_id", length = 20) | |||||
| private String tareListId; | |||||
| @Column(name = "del_weight") | |||||
| private Float delWeight; | |||||
| @Column(name = "goods", length = 50) | |||||
| private String goods; | |||||
| @Column(name = "receive_unit", length = 50) | |||||
| private String receiveUnit; | |||||
| @Column(name = "send_unit", length = 50) | |||||
| private String sendUnit; | |||||
| @Column(name = "send_station", length = 50) | |||||
| private String sendStation; | |||||
| @Column(name = "the_station", length = 50) | |||||
| private String theStation; | |||||
| @Column(name = "furnace_number", length = 50) | |||||
| private String furnaceNumber; | |||||
| @Column(name = "iron_number", length = 50) | |||||
| private String ironNumber; | |||||
| @Column(name = "direction", length = 50) | |||||
| private String direction; | |||||
| } | |||||
| @@ -0,0 +1,73 @@ | |||||
| package com.example.webapi.repository; | |||||
| import com.example.webapi.entity.TwiceWeighing; | |||||
| import org.springframework.data.jpa.repository.JpaRepository; | |||||
| import org.springframework.data.jpa.repository.JpaSpecificationExecutor; | |||||
| import org.springframework.stereotype.Repository; | |||||
| /** | |||||
| * 二次称重记录数据访问层 | |||||
| * | |||||
| * @author Your Name | |||||
| * @version 1.0.0 | |||||
| */ | |||||
| @Repository("twiceWeighingRepository") | |||||
| public interface TwiceWeighingRepository extends JpaRepository<TwiceWeighing, String>, JpaSpecificationExecutor<TwiceWeighing> { | |||||
| /** | |||||
| * 根据车号查询记录 | |||||
| * | |||||
| * @param vehicleId 车号 | |||||
| * @return 二次称重记录 | |||||
| */ | |||||
| TwiceWeighing findByVehicleId(String vehicleId); | |||||
| /** | |||||
| * 根据打印编号查询记录 | |||||
| * | |||||
| * @param printId 打印编号 | |||||
| * @return 二次称重记录 | |||||
| */ | |||||
| TwiceWeighing findByPrintId(String printId); | |||||
| /** | |||||
| * 根据上传标志查询记录数量 | |||||
| * | |||||
| * @param uploadFlag 上传标志 | |||||
| * @return 记录数量 | |||||
| */ | |||||
| long countByUploadFlag(Boolean uploadFlag); | |||||
| /** | |||||
| * 根据作废标志查询记录数量 | |||||
| * | |||||
| * @param uselessFlag 作废标志 | |||||
| * @return 记录数量 | |||||
| */ | |||||
| long countByUselessFlag(Boolean uselessFlag); | |||||
| /** | |||||
| * 根据上传标志查询记录列表 | |||||
| * | |||||
| * @param uploadFlag 上传标志 | |||||
| * @return 二次称重记录列表 | |||||
| */ | |||||
| java.util.List<TwiceWeighing> findByUploadFlag(Boolean uploadFlag); | |||||
| /** | |||||
| * 根据皮重时间查询大于指定时间的记录 | |||||
| * | |||||
| * @param tareTime 皮重时间 | |||||
| * @return 二次称重记录列表 | |||||
| */ | |||||
| java.util.List<TwiceWeighing> findByTareTimeAfter(java.util.Date tareTime); | |||||
| /** | |||||
| * 根据皮重时间查询大于指定时间且未上传的记录 | |||||
| * | |||||
| * @param tareTime 皮重时间 | |||||
| * @param uploadFlag 上传标志 | |||||
| * @return 二次称重记录列表 | |||||
| */ | |||||
| java.util.List<TwiceWeighing> findByTareTimeAfterAndUploadFlag(java.util.Date tareTime, Boolean uploadFlag); | |||||
| } | |||||
| @@ -0,0 +1,38 @@ | |||||
| package com.example.webapi.repository.pg; | |||||
| import com.example.webapi.entity.postgresql.TwiceWeighingPostgreSQL; | |||||
| import org.springframework.data.jpa.repository.JpaRepository; | |||||
| import org.springframework.data.jpa.repository.Query; | |||||
| import org.springframework.data.repository.query.Param; | |||||
| import org.springframework.stereotype.Repository; | |||||
| import java.util.List; | |||||
| @Repository | |||||
| public interface TwiceWeighingPostgreSQLRepository extends JpaRepository<TwiceWeighingPostgreSQL, String> { | |||||
| @Query("SELECT t FROM TwiceWeighingPostgreSQL t WHERE t.uploadFlag = :uploadFlag") | |||||
| List<TwiceWeighingPostgreSQL> findByUploadFlag(@Param("uploadFlag") Boolean uploadFlag); | |||||
| @Query("SELECT t FROM TwiceWeighingPostgreSQL t WHERE t.uselessFlag = :uselessFlag") | |||||
| List<TwiceWeighingPostgreSQL> findByUselessFlag(@Param("uselessFlag") Boolean uselessFlag); | |||||
| @Query("SELECT t FROM TwiceWeighingPostgreSQL t WHERE t.vehicleId = :vehicleId") | |||||
| List<TwiceWeighingPostgreSQL> findByVehicleId(@Param("vehicleId") String vehicleId); | |||||
| @Query("SELECT t FROM TwiceWeighingPostgreSQL t WHERE t.grossTime BETWEEN :startTime AND :endTime") | |||||
| List<TwiceWeighingPostgreSQL> findByGrossTimeBetween(@Param("startTime") java.util.Date startTime, | |||||
| @Param("endTime") java.util.Date endTime); | |||||
| /** | |||||
| * 查询最大的皮重时间 | |||||
| */ | |||||
| @Query("SELECT MAX(t.tareTime) FROM TwiceWeighingPostgreSQL t WHERE t.tareTime IS NOT NULL") | |||||
| java.util.Date findMaxTareTime(); | |||||
| /** | |||||
| * 根据皮重时间范围查询记录 | |||||
| */ | |||||
| @Query("SELECT t FROM TwiceWeighingPostgreSQL t WHERE t.tareTime > :tareTime") | |||||
| List<TwiceWeighingPostgreSQL> findByTareTimeAfter(@Param("tareTime") java.util.Date tareTime); | |||||
| } | |||||
| @@ -0,0 +1,352 @@ | |||||
| package com.example.webapi.service; | |||||
| import com.example.webapi.entity.TwiceWeighing; | |||||
| import com.example.webapi.entity.postgresql.TwiceWeighingPostgreSQL; | |||||
| import com.example.webapi.repository.TwiceWeighingRepository; | |||||
| import com.example.webapi.repository.pg.TwiceWeighingPostgreSQLRepository; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.beans.factory.annotation.Qualifier; | |||||
| import org.springframework.data.domain.Page; | |||||
| import org.springframework.data.domain.PageRequest; | |||||
| import org.springframework.data.domain.Pageable; | |||||
| import org.springframework.data.domain.Sort; | |||||
| import org.springframework.data.jpa.domain.Specification; | |||||
| import org.springframework.stereotype.Service; | |||||
| import org.springframework.transaction.annotation.Transactional; | |||||
| import javax.persistence.criteria.CriteriaBuilder; | |||||
| import javax.persistence.criteria.CriteriaQuery; | |||||
| import javax.persistence.criteria.Predicate; | |||||
| import javax.persistence.criteria.Root; | |||||
| import java.util.ArrayList; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| import java.util.Optional; | |||||
| @Service | |||||
| public class DataSyncService { | |||||
| @Autowired | |||||
| @Qualifier("twiceWeighingRepository") | |||||
| private TwiceWeighingRepository twiceWeighingRepository; | |||||
| @Autowired | |||||
| @Qualifier("twiceWeighingPostgreSQLRepository") | |||||
| private TwiceWeighingPostgreSQLRepository twiceWeighingPostgreSQLRepository; | |||||
| /** | |||||
| * 同步单条数据 | |||||
| */ | |||||
| @Transactional(transactionManager = "postgresqlTransactionManager") | |||||
| public boolean syncSingleRecord(String id) { | |||||
| try { | |||||
| Optional<TwiceWeighing> sourceRecord = twiceWeighingRepository.findById(id); | |||||
| if (sourceRecord.isPresent()) { | |||||
| TwiceWeighing source = sourceRecord.get(); | |||||
| TwiceWeighingPostgreSQL target = convertToPostgreSQL(source); | |||||
| // 直接插入新记录 | |||||
| twiceWeighingPostgreSQLRepository.save(target); | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| return false; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 批量同步数据 - 仅插入操作 | |||||
| */ | |||||
| @Transactional(transactionManager = "postgresqlTransactionManager") | |||||
| public int syncBatchRecords(List<String> ids) { | |||||
| try { | |||||
| List<TwiceWeighing> sourceRecords = new ArrayList<>(); | |||||
| // 批量查询源数据 | |||||
| for (String id : ids) { | |||||
| Optional<TwiceWeighing> sourceRecord = twiceWeighingRepository.findById(id); | |||||
| if (sourceRecord.isPresent()) { | |||||
| sourceRecords.add(sourceRecord.get()); | |||||
| } | |||||
| } | |||||
| // 使用批量处理方法 | |||||
| return processBatch(sourceRecords); | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 同步所有未上传的数据 - 分批处理 | |||||
| */ | |||||
| @Transactional(transactionManager = "postgresqlTransactionManager") | |||||
| public int syncUnuploadedRecords() { | |||||
| return syncUnuploadedRecords(500); | |||||
| } | |||||
| /** | |||||
| * 同步所有未上传的数据 - 指定批次大小 | |||||
| */ | |||||
| @Transactional(transactionManager = "postgresqlTransactionManager") | |||||
| public int syncUnuploadedRecords(int batchSize) { | |||||
| try { | |||||
| List<TwiceWeighing> unuploadedRecords = twiceWeighingRepository.findByUploadFlag(false); | |||||
| int totalRecords = unuploadedRecords.size(); | |||||
| System.out.println("未上传数据同步开始,总记录数: " + totalRecords + ",批次大小: " + batchSize); | |||||
| int successCount = 0; | |||||
| int batchCount = 0; | |||||
| // 分批处理 | |||||
| for (int i = 0; i < totalRecords; i += batchSize) { | |||||
| int endIndex = Math.min(i + batchSize, totalRecords); | |||||
| List<TwiceWeighing> batchRecords = unuploadedRecords.subList(i, endIndex); | |||||
| batchCount++; | |||||
| System.out.println("处理第 " + batchCount + " 批,记录范围: " + (i + 1) + " - " + endIndex); | |||||
| int batchSuccessCount = processBatch(batchRecords); | |||||
| successCount += batchSuccessCount; | |||||
| System.out.println("第 " + batchCount + " 批处理完成,成功: " + batchSuccessCount + " 条"); | |||||
| } | |||||
| System.out.println("未上传数据同步完成,总成功: " + successCount + " 条"); | |||||
| return successCount; | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 增量同步数据(基于皮重时间) | |||||
| */ | |||||
| @Transactional(transactionManager = "postgresqlTransactionManager") | |||||
| public int syncIncrementalData() { | |||||
| try { | |||||
| // 获取PostgreSQL中最大的皮重时间 | |||||
| Date maxTareTime = twiceWeighingPostgreSQLRepository.findMaxTareTime(); | |||||
| if (maxTareTime == null) { | |||||
| // 如果PostgreSQL中没有数据,则同步所有数据 | |||||
| return syncAllData(); | |||||
| } | |||||
| // 查询SQL Server中大于最大皮重时间的记录 | |||||
| List<TwiceWeighing> incrementalRecords = twiceWeighingRepository.findByTareTimeAfter(maxTareTime); | |||||
| int successCount = 0; | |||||
| for (TwiceWeighing source : incrementalRecords) { | |||||
| TwiceWeighingPostgreSQL target = convertToPostgreSQL(source); | |||||
| // 检查是否已存在 | |||||
| Optional<TwiceWeighingPostgreSQL> existingRecord = twiceWeighingPostgreSQLRepository.findById(source.getId()); | |||||
| if (existingRecord.isPresent()) { | |||||
| // 更新现有记录 | |||||
| TwiceWeighingPostgreSQL existing = existingRecord.get(); | |||||
| updatePostgreSQLRecord(existing, source); | |||||
| twiceWeighingPostgreSQLRepository.save(existing); | |||||
| } else { | |||||
| // 插入新记录 | |||||
| twiceWeighingPostgreSQLRepository.save(target); | |||||
| } | |||||
| successCount++; | |||||
| } | |||||
| return successCount; | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 同步所有数据(用于首次同步或重置)- 分批处理 | |||||
| */ | |||||
| @Transactional(transactionManager = "postgresqlTransactionManager") | |||||
| public int syncAllData() { | |||||
| return syncAllData(500); | |||||
| } | |||||
| /** | |||||
| * 同步所有数据(用于首次同步或重置)- 指定批次大小 | |||||
| */ | |||||
| @Transactional(transactionManager = "postgresqlTransactionManager") | |||||
| public int syncAllData(int batchSize) { | |||||
| try { | |||||
| List<TwiceWeighing> allRecords = twiceWeighingRepository.findAll(); | |||||
| int totalRecords = allRecords.size(); | |||||
| System.out.println("全量同步开始,总记录数: " + totalRecords + ",批次大小: " + batchSize); | |||||
| int successCount = 0; | |||||
| int batchCount = 0; | |||||
| // 分批处理 | |||||
| for (int i = 0; i < totalRecords; i += batchSize) { | |||||
| int endIndex = Math.min(i + batchSize, totalRecords); | |||||
| List<TwiceWeighing> batchRecords = allRecords.subList(i, endIndex); | |||||
| batchCount++; | |||||
| System.out.println("处理第 " + batchCount + " 批,记录范围: " + (i + 1) + " - " + endIndex); | |||||
| int batchSuccessCount = processBatch(batchRecords); | |||||
| successCount += batchSuccessCount; | |||||
| System.out.println("第 " + batchCount + " 批处理完成,成功: " + batchSuccessCount + " 条"); | |||||
| } | |||||
| System.out.println("全量同步完成,总成功: " + successCount + " 条"); | |||||
| return successCount; | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 处理一批数据 - 仅插入操作 | |||||
| */ | |||||
| private int processBatch(List<TwiceWeighing> batchRecords) { | |||||
| int successCount = 0; | |||||
| List<TwiceWeighingPostgreSQL> entitiesToSave = new ArrayList<>(); | |||||
| for (TwiceWeighing source : batchRecords) { | |||||
| try { | |||||
| // 直接转换为PostgreSQL实体 | |||||
| TwiceWeighingPostgreSQL target = convertToPostgreSQL(source); | |||||
| entitiesToSave.add(target); | |||||
| successCount++; | |||||
| } catch (Exception e) { | |||||
| System.err.println("处理记录失败,ID: " + source.getId() + ", 错误: " + e.getMessage()); | |||||
| } | |||||
| } | |||||
| // 批量插入并立即刷新 | |||||
| if (!entitiesToSave.isEmpty()) { | |||||
| try { | |||||
| twiceWeighingPostgreSQLRepository.saveAllAndFlush(entitiesToSave); | |||||
| System.out.println("批量插入 " + entitiesToSave.size() + " 条记录成功"); | |||||
| } catch (Exception e) { | |||||
| System.err.println("批量插入失败: " + e.getMessage()); | |||||
| // 如果批量插入失败,尝试逐条插入 | |||||
| for (TwiceWeighingPostgreSQL entity : entitiesToSave) { | |||||
| try { | |||||
| twiceWeighingPostgreSQLRepository.save(entity); | |||||
| successCount++; | |||||
| } catch (Exception ex) { | |||||
| System.err.println("单条插入失败,ID: " + entity.getId() + ", 错误: " + ex.getMessage()); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| return successCount; | |||||
| } | |||||
| /** | |||||
| * 将SQL Server实体转换为PostgreSQL实体 | |||||
| */ | |||||
| private TwiceWeighingPostgreSQL convertToPostgreSQL(TwiceWeighing source) { | |||||
| TwiceWeighingPostgreSQL target = new TwiceWeighingPostgreSQL(); | |||||
| target.setId(source.getId()); | |||||
| target.setVehicleType(source.getVehicleType()); | |||||
| target.setVehicleId(source.getVehicleId()); | |||||
| target.setGross(source.getGross()); | |||||
| target.setTare(source.getTare()); | |||||
| target.setNet(source.getNet()); | |||||
| target.setStandard(source.getStandard()); | |||||
| target.setMaxWeight(source.getMaxWeight()); | |||||
| target.setOtherNet(source.getOtherNet()); | |||||
| target.setGrossTime(source.getGrossTime()); | |||||
| target.setTareTime(source.getTareTime()); | |||||
| target.setNetTime(source.getNetTime()); | |||||
| target.setWinterval(source.getWinterval()); | |||||
| target.setGrossNodeId(source.getGrossNodeId()); | |||||
| target.setTareNodeId(source.getTareNodeId()); | |||||
| target.setGrossScaleId(source.getGrossScaleId()); | |||||
| target.setTareScaleId(source.getTareScaleId()); | |||||
| target.setGrossOpId(source.getGrossOpId()); | |||||
| target.setTareOpId(source.getTareOpId()); | |||||
| target.setTareModel(source.getTareModel()); | |||||
| target.setUploadFlag(source.getUploadFlag()); | |||||
| target.setUselessFlag(source.getUselessFlag()); | |||||
| target.setPrintCount(source.getPrintCount()); | |||||
| target.setPrintId(source.getPrintId()); | |||||
| target.setDemo(source.getDemo()); | |||||
| target.setMaterialsId(source.getMaterialsId()); | |||||
| target.setSupplierId(source.getSupplierId()); | |||||
| target.setLossPath(source.getLossPath()); | |||||
| target.setWinWeight(source.getWinWeight()); | |||||
| target.setLossWeight(source.getLossWeight()); | |||||
| target.setGrossSpeed(source.getGrossSpeed()); | |||||
| target.setTareSpeed(source.getTareSpeed()); | |||||
| target.setGrossListId(source.getGrossListId()); | |||||
| target.setTareListId(source.getTareListId()); | |||||
| target.setDelWeight(source.getDelWeight()); | |||||
| target.setGoods(source.getGoods()); | |||||
| target.setReceiveUnit(source.getReceiveUnit()); | |||||
| target.setSendUnit(source.getSendUnit()); | |||||
| target.setSendStation(source.getSendStation()); | |||||
| target.setTheStation(source.getTheStation()); | |||||
| target.setFurnaceNumber(source.getFurnaceNumber()); | |||||
| target.setIronNumber(source.getIronNumber()); | |||||
| target.setDirection(source.getDirection()); | |||||
| return target; | |||||
| } | |||||
| /** | |||||
| * 更新PostgreSQL记录 | |||||
| */ | |||||
| private void updatePostgreSQLRecord(TwiceWeighingPostgreSQL target, TwiceWeighing source) { | |||||
| target.setVehicleType(source.getVehicleType()); | |||||
| target.setVehicleId(source.getVehicleId()); | |||||
| target.setGross(source.getGross()); | |||||
| target.setTare(source.getTare()); | |||||
| target.setNet(source.getNet()); | |||||
| target.setStandard(source.getStandard()); | |||||
| target.setMaxWeight(source.getMaxWeight()); | |||||
| target.setOtherNet(source.getOtherNet()); | |||||
| target.setGrossTime(source.getGrossTime()); | |||||
| target.setTareTime(source.getTareTime()); | |||||
| target.setNetTime(source.getNetTime()); | |||||
| target.setWinterval(source.getWinterval()); | |||||
| target.setGrossNodeId(source.getGrossNodeId()); | |||||
| target.setTareNodeId(source.getTareNodeId()); | |||||
| target.setGrossScaleId(source.getGrossScaleId()); | |||||
| target.setTareScaleId(source.getTareScaleId()); | |||||
| target.setGrossOpId(source.getGrossOpId()); | |||||
| target.setTareOpId(source.getTareOpId()); | |||||
| target.setTareModel(source.getTareModel()); | |||||
| target.setUploadFlag(source.getUploadFlag()); | |||||
| target.setUselessFlag(source.getUselessFlag()); | |||||
| target.setPrintCount(source.getPrintCount()); | |||||
| target.setPrintId(source.getPrintId()); | |||||
| target.setDemo(source.getDemo()); | |||||
| target.setMaterialsId(source.getMaterialsId()); | |||||
| target.setSupplierId(source.getSupplierId()); | |||||
| target.setLossPath(source.getLossPath()); | |||||
| target.setWinWeight(source.getWinWeight()); | |||||
| target.setLossWeight(source.getLossWeight()); | |||||
| target.setGrossSpeed(source.getGrossSpeed()); | |||||
| target.setTareSpeed(source.getTareSpeed()); | |||||
| target.setGrossListId(source.getGrossListId()); | |||||
| target.setTareListId(source.getTareListId()); | |||||
| target.setDelWeight(source.getDelWeight()); | |||||
| target.setGoods(source.getGoods()); | |||||
| target.setReceiveUnit(source.getReceiveUnit()); | |||||
| target.setSendUnit(source.getSendUnit()); | |||||
| target.setSendStation(source.getSendStation()); | |||||
| target.setTheStation(source.getTheStation()); | |||||
| target.setFurnaceNumber(source.getFurnaceNumber()); | |||||
| target.setIronNumber(source.getIronNumber()); | |||||
| target.setDirection(source.getDirection()); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,60 @@ | |||||
| package com.example.webapi.service; | |||||
| import lombok.RequiredArgsConstructor; | |||||
| import lombok.extern.slf4j.Slf4j; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.boot.CommandLineRunner; | |||||
| import org.springframework.scheduling.annotation.Scheduled; | |||||
| import org.springframework.stereotype.Component; | |||||
| import org.springframework.stereotype.Service; | |||||
| @Component | |||||
| @Slf4j | |||||
| @RequiredArgsConstructor | |||||
| public class ScheduledSyncService implements CommandLineRunner { | |||||
| private static final Logger logger = LoggerFactory.getLogger(ScheduledSyncService.class); | |||||
| @Autowired | |||||
| private DataSyncService dataSyncService; | |||||
| /** | |||||
| * 每5分钟执行一次增量同步 | |||||
| */ | |||||
| @Scheduled(fixedRate = 300000) // 5分钟 = 300000毫秒 | |||||
| public void syncIncrementalData() { | |||||
| try { | |||||
| logger.info("开始定时增量同步数据..."); | |||||
| int count = dataSyncService.syncIncrementalData(); | |||||
| logger.info("定时增量同步完成,成功同步 {} 条记录", count); | |||||
| } catch (Exception e) { | |||||
| logger.error("定时增量同步过程中发生错误: {}", e.getMessage(), e); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 每天凌晨2点执行全量同步检查 | |||||
| */ | |||||
| @Scheduled(cron = "0 0 2 * * ?") | |||||
| public void dailyFullSync() { | |||||
| try { | |||||
| logger.info("开始每日全量同步检查..."); | |||||
| int count = dataSyncService.syncIncrementalData(); | |||||
| logger.info("每日全量同步检查完成,成功同步 {} 条记录", count); | |||||
| } catch (Exception e) { | |||||
| logger.error("每日全量同步检查过程中发生错误: {}", e.getMessage(), e); | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public void run(String... args) throws Exception { | |||||
| System.out.println("项目启动后执行增量同步------------------"); | |||||
| try { | |||||
| syncIncrementalData(); | |||||
| } catch (Exception e) { | |||||
| logger.error("启动时增量同步失败: {}", e.getMessage(), e); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,259 @@ | |||||
| package com.example.webapi.service; | |||||
| import com.example.webapi.dto.TwiceWeighingQueryDTO; | |||||
| import com.example.webapi.entity.TwiceWeighing; | |||||
| import com.example.webapi.repository.TwiceWeighingRepository; | |||||
| import com.example.webapi.util.PageUtil; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.data.domain.Page; | |||||
| import org.springframework.data.domain.PageRequest; | |||||
| import org.springframework.data.domain.Pageable; | |||||
| import org.springframework.data.domain.Sort; | |||||
| import org.springframework.data.jpa.domain.Specification; | |||||
| import org.springframework.stereotype.Service; | |||||
| import org.springframework.transaction.annotation.Transactional; | |||||
| import org.springframework.util.StringUtils; | |||||
| import javax.persistence.criteria.Predicate; | |||||
| import java.util.ArrayList; | |||||
| import java.util.List; | |||||
| import java.util.Optional; | |||||
| /** | |||||
| * 二次称重记录服务层 | |||||
| * | |||||
| * @author Your Name | |||||
| * @version 1.0.0 | |||||
| */ | |||||
| @Service | |||||
| @Transactional | |||||
| public class TwiceWeighingService { | |||||
| @Autowired | |||||
| private TwiceWeighingRepository repository; | |||||
| /** | |||||
| * 根据条件分页查询二次称重记录 | |||||
| * | |||||
| * @param queryDTO 查询条件 | |||||
| * @return 分页结果 | |||||
| */ | |||||
| public Page<TwiceWeighing> findByConditions(TwiceWeighingQueryDTO queryDTO) { | |||||
| // 构建分页和排序 | |||||
| Pageable pageable = buildPageable(queryDTO); | |||||
| // 构建查询条件 | |||||
| Specification<TwiceWeighing> spec = buildSpecification(queryDTO); | |||||
| return repository.findAll(spec, pageable); | |||||
| } | |||||
| /** | |||||
| * 根据ID查询二次称重记录 | |||||
| * | |||||
| * @param id 记录ID | |||||
| * @return 二次称重记录 | |||||
| */ | |||||
| public Optional<TwiceWeighing> findById(String id) { | |||||
| return repository.findById(id); | |||||
| } | |||||
| /** | |||||
| * 保存二次称重记录 | |||||
| * | |||||
| * @param entity 二次称重记录 | |||||
| * @return 保存后的记录 | |||||
| */ | |||||
| public TwiceWeighing save(TwiceWeighing entity) { | |||||
| return repository.save(entity); | |||||
| } | |||||
| /** | |||||
| * 根据ID删除二次称重记录 | |||||
| * | |||||
| * @param id 记录ID | |||||
| */ | |||||
| public void deleteById(String id) { | |||||
| repository.deleteById(id); | |||||
| } | |||||
| /** | |||||
| * 根据车号查询记录 | |||||
| * | |||||
| * @param vehicleId 车号 | |||||
| * @return 二次称重记录 | |||||
| */ | |||||
| public TwiceWeighing findByVehicleId(String vehicleId) { | |||||
| return repository.findByVehicleId(vehicleId); | |||||
| } | |||||
| /** | |||||
| * 根据打印编号查询记录 | |||||
| * | |||||
| * @param printId 打印编号 | |||||
| * @return 二次称重记录 | |||||
| */ | |||||
| public TwiceWeighing findByPrintId(String printId) { | |||||
| return repository.findByPrintId(printId); | |||||
| } | |||||
| /** | |||||
| * 获取上传记录数量 | |||||
| * | |||||
| * @param uploadFlag 上传标志 | |||||
| * @return 记录数量 | |||||
| */ | |||||
| public long countByUploadFlag(Boolean uploadFlag) { | |||||
| return repository.countByUploadFlag(uploadFlag); | |||||
| } | |||||
| /** | |||||
| * 获取作废记录数量 | |||||
| * | |||||
| * @param uselessFlag 作废标志 | |||||
| * @return 记录数量 | |||||
| */ | |||||
| public long countByUselessFlag(Boolean uselessFlag) { | |||||
| return repository.countByUselessFlag(uselessFlag); | |||||
| } | |||||
| /** | |||||
| * 构建分页和排序 | |||||
| * | |||||
| * @param queryDTO 查询条件 | |||||
| * @return 分页对象 | |||||
| */ | |||||
| private Pageable buildPageable(TwiceWeighingQueryDTO queryDTO) { | |||||
| // 分页参数 | |||||
| int page = queryDTO.getPage() != null ? queryDTO.getPage() : 0; | |||||
| int size = queryDTO.getSize() != null ? queryDTO.getSize() : 10; | |||||
| // 排序 | |||||
| Sort sort = Sort.unsorted(); | |||||
| if (StringUtils.hasText(queryDTO.getSortBy())) { | |||||
| String direction = "desc".equalsIgnoreCase(queryDTO.getSortDirection()) ? "desc" : "asc"; | |||||
| sort = Sort.by(Sort.Direction.fromString(direction), queryDTO.getSortBy()); | |||||
| } | |||||
| return PageRequest.of(page, size, sort); | |||||
| } | |||||
| /** | |||||
| * 构建查询条件 | |||||
| * | |||||
| * @param queryDTO 查询条件 | |||||
| * @return 查询规格 | |||||
| */ | |||||
| private Specification<TwiceWeighing> buildSpecification(TwiceWeighingQueryDTO queryDTO) { | |||||
| return (root, query, criteriaBuilder) -> { | |||||
| List<Predicate> predicates = new ArrayList<>(); | |||||
| // 车号模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getVehicleId())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("vehicleId"), "%" + queryDTO.getVehicleId() + "%")); | |||||
| } | |||||
| // 车型精确匹配 | |||||
| if (StringUtils.hasText(queryDTO.getVehicleType())) { | |||||
| predicates.add(criteriaBuilder.equal(root.get("vehicleType"), queryDTO.getVehicleType())); | |||||
| } | |||||
| // 货物模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getGoods())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("goods"), "%" + queryDTO.getGoods() + "%")); | |||||
| } | |||||
| // 收货单位模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getReceiveUnit())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("receiveUnit"), "%" + queryDTO.getReceiveUnit() + "%")); | |||||
| } | |||||
| // 发货单位模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getSendUnit())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("sendUnit"), "%" + queryDTO.getSendUnit() + "%")); | |||||
| } | |||||
| // 发货站模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getSendStation())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("sendStation"), "%" + queryDTO.getSendStation() + "%")); | |||||
| } | |||||
| // 到站模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getTheStation())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("theStation"), "%" + queryDTO.getTheStation() + "%")); | |||||
| } | |||||
| // 炉号模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getFurnaceNumber())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("furnaceNumber"), "%" + queryDTO.getFurnaceNumber() + "%")); | |||||
| } | |||||
| // 铁号模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getIronNumber())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("ironNumber"), "%" + queryDTO.getIronNumber() + "%")); | |||||
| } | |||||
| // 方向精确匹配 | |||||
| if (StringUtils.hasText(queryDTO.getDirection())) { | |||||
| predicates.add(criteriaBuilder.equal(root.get("direction"), queryDTO.getDirection())); | |||||
| } | |||||
| // 毛重操作员ID模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getGrossOpId())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("grossOpId"), "%" + queryDTO.getGrossOpId() + "%")); | |||||
| } | |||||
| // 皮重操作员ID模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getTareOpId())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("tareOpId"), "%" + queryDTO.getTareOpId() + "%")); | |||||
| } | |||||
| // 打印编号模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getPrintId())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("printId"), "%" + queryDTO.getPrintId() + "%")); | |||||
| } | |||||
| // 备注模糊查询 | |||||
| if (StringUtils.hasText(queryDTO.getDemo())) { | |||||
| predicates.add(criteriaBuilder.like(root.get("demo"), "%" + queryDTO.getDemo() + "%")); | |||||
| } | |||||
| // 物资ID精确匹配 | |||||
| if (queryDTO.getMaterialsId() != null) { | |||||
| predicates.add(criteriaBuilder.equal(root.get("materialsId"), queryDTO.getMaterialsId())); | |||||
| } | |||||
| // 供应商ID精确匹配 | |||||
| if (queryDTO.getSupplierId() != null) { | |||||
| predicates.add(criteriaBuilder.equal(root.get("supplierId"), queryDTO.getSupplierId())); | |||||
| } | |||||
| // 上传标志精确匹配 | |||||
| if (queryDTO.getUploadFlag() != null) { | |||||
| predicates.add(criteriaBuilder.equal(root.get("uploadFlag"), queryDTO.getUploadFlag())); | |||||
| } | |||||
| // 作废标志精确匹配 | |||||
| if (queryDTO.getUselessFlag() != null) { | |||||
| predicates.add(criteriaBuilder.equal(root.get("uselessFlag"), queryDTO.getUselessFlag())); | |||||
| } | |||||
| // 皮重模式精确匹配 | |||||
| if (StringUtils.hasText(queryDTO.getTareModel())) { | |||||
| predicates.add(criteriaBuilder.equal(root.get("tareModel"), queryDTO.getTareModel())); | |||||
| } | |||||
| // 毛重衡器ID精确匹配 | |||||
| if (StringUtils.hasText(queryDTO.getGrossScaleId())) { | |||||
| predicates.add(criteriaBuilder.equal(root.get("grossScaleId"), queryDTO.getGrossScaleId())); | |||||
| } | |||||
| // 皮重衡器ID精确匹配 | |||||
| if (StringUtils.hasText(queryDTO.getTareScaleId())) { | |||||
| predicates.add(criteriaBuilder.equal(root.get("tareScaleId"), queryDTO.getTareScaleId())); | |||||
| } | |||||
| return criteriaBuilder.and(predicates.toArray(new Predicate[0])); | |||||
| }; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,163 @@ | |||||
| package com.example.webapi.util; | |||||
| import com.example.webapi.entity.TwiceWeighing; | |||||
| import com.example.webapi.entity.postgresql.TwiceWeighingPostgreSQL; | |||||
| import com.example.webapi.repository.TwiceWeighingRepository; | |||||
| import com.example.webapi.repository.pg.TwiceWeighingPostgreSQLRepository; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.beans.factory.annotation.Qualifier; | |||||
| import org.springframework.stereotype.Component; | |||||
| import java.math.BigDecimal; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| /** | |||||
| * 数据同步测试工具类 | |||||
| */ | |||||
| @Component | |||||
| public class DataSyncTest { | |||||
| @Autowired | |||||
| @Qualifier("twiceWeighingRepository") | |||||
| private TwiceWeighingRepository twiceWeighingRepository; | |||||
| @Autowired | |||||
| @Qualifier("twiceWeighingPostgreSQLRepository") | |||||
| private TwiceWeighingPostgreSQLRepository twiceWeighingPostgreSQLRepository; | |||||
| /** | |||||
| * 测试数据源连接 | |||||
| */ | |||||
| public void testDataSources() { | |||||
| System.out.println("=== 测试数据源连接 ==="); | |||||
| try { | |||||
| // 测试SQL Server连接 | |||||
| long sqlServerCount = twiceWeighingRepository.count(); | |||||
| System.out.println("SQL Server连接正常,记录总数: " + sqlServerCount); | |||||
| // 测试PostgreSQL连接 | |||||
| long postgresqlCount = twiceWeighingPostgreSQLRepository.count(); | |||||
| System.out.println("PostgreSQL连接正常,记录总数: " + postgresqlCount); | |||||
| } catch (Exception e) { | |||||
| System.err.println("数据源连接测试失败: " + e.getMessage()); | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 测试数据同步 | |||||
| */ | |||||
| public void testDataSync() { | |||||
| System.out.println("=== 测试数据同步 ==="); | |||||
| try { | |||||
| // 获取SQL Server中的一条记录 | |||||
| List<TwiceWeighing> records = twiceWeighingRepository.findAll(); | |||||
| if (!records.isEmpty()) { | |||||
| TwiceWeighing sourceRecord = records.get(0); | |||||
| System.out.println("源记录ID: " + sourceRecord.getId()); | |||||
| // 转换为PostgreSQL实体 | |||||
| TwiceWeighingPostgreSQL targetRecord = convertToPostgreSQL(sourceRecord); | |||||
| // 保存到PostgreSQL | |||||
| twiceWeighingPostgreSQLRepository.save(targetRecord); | |||||
| System.out.println("数据同步测试成功"); | |||||
| } else { | |||||
| System.out.println("SQL Server中没有找到记录"); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| System.err.println("数据同步测试失败: " + e.getMessage()); | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 测试增量同步 | |||||
| */ | |||||
| public void testIncrementalSync() { | |||||
| System.out.println("=== 测试增量同步 ==="); | |||||
| try { | |||||
| // 获取PostgreSQL中最大的皮重时间 | |||||
| Date maxTareTime = twiceWeighingPostgreSQLRepository.findMaxTareTime(); | |||||
| System.out.println("PostgreSQL中最大皮重时间: " + maxTareTime); | |||||
| if (maxTareTime == null) { | |||||
| System.out.println("PostgreSQL中没有数据,将执行全量同步"); | |||||
| return; | |||||
| } | |||||
| // 查询SQL Server中大于最大皮重时间的记录 | |||||
| List<TwiceWeighing> incrementalRecords = twiceWeighingRepository.findByTareTimeAfter(maxTareTime); | |||||
| System.out.println("需要增量同步的记录数: " + incrementalRecords.size()); | |||||
| if (!incrementalRecords.isEmpty()) { | |||||
| System.out.println("第一条增量记录ID: " + incrementalRecords.get(0).getId()); | |||||
| System.out.println("第一条增量记录皮重时间: " + incrementalRecords.get(0).getTareTime()); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| System.err.println("增量同步测试失败: " + e.getMessage()); | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 将SQL Server实体转换为PostgreSQL实体 | |||||
| */ | |||||
| private TwiceWeighingPostgreSQL convertToPostgreSQL(TwiceWeighing source) { | |||||
| TwiceWeighingPostgreSQL target = new TwiceWeighingPostgreSQL(); | |||||
| target.setId(source.getId()); | |||||
| target.setVehicleType(source.getVehicleType()); | |||||
| target.setVehicleId(source.getVehicleId()); | |||||
| target.setGross(source.getGross()); | |||||
| target.setTare(source.getTare()); | |||||
| target.setNet(source.getNet()); | |||||
| target.setStandard(source.getStandard()); | |||||
| target.setMaxWeight(source.getMaxWeight()); | |||||
| target.setOtherNet(source.getOtherNet()); | |||||
| target.setGrossTime(source.getGrossTime()); | |||||
| target.setTareTime(source.getTareTime()); | |||||
| target.setNetTime(source.getNetTime()); | |||||
| target.setWinterval(source.getWinterval()); | |||||
| target.setGrossNodeId(source.getGrossNodeId()); | |||||
| target.setTareNodeId(source.getTareNodeId()); | |||||
| target.setGrossScaleId(source.getGrossScaleId()); | |||||
| target.setTareScaleId(source.getTareScaleId()); | |||||
| target.setGrossOpId(source.getGrossOpId()); | |||||
| target.setTareOpId(source.getTareOpId()); | |||||
| target.setTareModel(source.getTareModel()); | |||||
| target.setUploadFlag(source.getUploadFlag()); | |||||
| target.setUselessFlag(source.getUselessFlag()); | |||||
| target.setPrintCount(source.getPrintCount()); | |||||
| target.setPrintId(source.getPrintId()); | |||||
| target.setDemo(source.getDemo()); | |||||
| target.setMaterialsId(source.getMaterialsId()); | |||||
| target.setSupplierId(source.getSupplierId()); | |||||
| target.setLossPath(source.getLossPath()); | |||||
| target.setWinWeight(source.getWinWeight()); | |||||
| target.setLossWeight(source.getLossWeight()); | |||||
| target.setGrossSpeed(source.getGrossSpeed()); | |||||
| target.setTareSpeed(source.getTareSpeed()); | |||||
| target.setGrossListId(source.getGrossListId()); | |||||
| target.setTareListId(source.getTareListId()); | |||||
| target.setDelWeight(source.getDelWeight()); | |||||
| target.setGoods(source.getGoods()); | |||||
| target.setReceiveUnit(source.getReceiveUnit()); | |||||
| target.setSendUnit(source.getSendUnit()); | |||||
| target.setSendStation(source.getSendStation()); | |||||
| target.setTheStation(source.getTheStation()); | |||||
| target.setFurnaceNumber(source.getFurnaceNumber()); | |||||
| target.setIronNumber(source.getIronNumber()); | |||||
| target.setDirection(source.getDirection()); | |||||
| return target; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,52 @@ | |||||
| package com.example.webapi.util; | |||||
| import org.springframework.stereotype.Component; | |||||
| import java.sql.Connection; | |||||
| import java.sql.DriverManager; | |||||
| import java.sql.SQLException; | |||||
| import java.util.Properties; | |||||
| @Component | |||||
| public class DatabaseConnectionTest { | |||||
| public void testConnection() { | |||||
| try { | |||||
| // 设置连接属性 | |||||
| Properties props = new Properties(); | |||||
| props.setProperty("user", "sa"); | |||||
| props.setProperty("password", "sa"); | |||||
| props.setProperty("encrypt", "false"); | |||||
| props.setProperty("trustServerCertificate", "true"); | |||||
| props.setProperty("hostNameInCertificate", "*"); | |||||
| props.setProperty("serverNameAsACE", "false"); | |||||
| props.setProperty("sendStringParametersAsUnicode", "false"); | |||||
| props.setProperty("loginTimeout", "60"); | |||||
| props.setProperty("integratedSecurity", "false"); | |||||
| props.setProperty("rewriteBatchedStatements", "true"); | |||||
| props.setProperty("SelectMethod", "cursor"); | |||||
| props.setProperty("validateBulkLoadParameters", "false"); | |||||
| props.setProperty("sendTemporalDataTypesAsStringForBulkCopy", "true"); | |||||
| props.setProperty("delayLoadingLobs", "true"); | |||||
| props.setProperty("useNTLMV2", "true"); | |||||
| props.setProperty("authenticationScheme", "NativeAuthentication"); | |||||
| // 测试连接 | |||||
| String url = "jdbc:sqlserver://192.168.35.216:1433;DatabaseName=WY_DATAMANAGE20250731"; | |||||
| Connection conn = DriverManager.getConnection(url, props); | |||||
| System.out.println("数据库连接测试成功!"); | |||||
| System.out.println("数据库产品名称: " + conn.getMetaData().getDatabaseProductName()); | |||||
| System.out.println("数据库版本: " + conn.getMetaData().getDatabaseProductVersion()); | |||||
| System.out.println("驱动名称: " + conn.getMetaData().getDriverName()); | |||||
| System.out.println("驱动版本: " + conn.getMetaData().getDriverVersion()); | |||||
| conn.close(); | |||||
| } catch (SQLException e) { | |||||
| System.err.println("数据库连接测试失败!"); | |||||
| System.err.println("错误信息: " + e.getMessage()); | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,150 @@ | |||||
| package com.example.webapi.util; | |||||
| import org.springframework.stereotype.Component; | |||||
| import java.sql.Connection; | |||||
| import java.sql.DatabaseMetaData; | |||||
| import java.sql.DriverManager; | |||||
| import java.sql.SQLException; | |||||
| import java.util.Properties; | |||||
| @Component | |||||
| public class SQLServerVersionTest { | |||||
| public void testConnection() { | |||||
| System.out.println("=== SQL Server 连接测试 ==="); | |||||
| // 测试JTDS驱动 | |||||
| testJTDSConnection(); | |||||
| // 测试Microsoft驱动 | |||||
| testMicrosoftConnection(); | |||||
| } | |||||
| private void testJTDSConnection() { | |||||
| System.out.println("\n--- 测试JTDS驱动 ---"); | |||||
| try { | |||||
| // JTDS驱动连接 | |||||
| System.out.println("尝试JTDS驱动连接..."); | |||||
| String url = "jdbc:jtds:sqlserver://192.168.35.216:1433/WY_DATAMANAGE20250731"; | |||||
| Properties props = new Properties(); | |||||
| props.setProperty("user", "sa"); | |||||
| props.setProperty("password", "sa"); | |||||
| props.setProperty("ssl", "ignore"); | |||||
| props.setProperty("sendStringParametersAsUnicode", "false"); | |||||
| props.setProperty("loginTimeout", "30"); | |||||
| props.setProperty("useNTLMV2", "true"); | |||||
| props.setProperty("useLOBs", "false"); | |||||
| props.setProperty("useCursors", "true"); | |||||
| props.setProperty("batchSize", "0"); | |||||
| props.setProperty("tds", "8.0"); | |||||
| Connection conn = DriverManager.getConnection(url, props); | |||||
| printConnectionInfo(conn, "JTDS驱动"); | |||||
| conn.close(); | |||||
| } catch (SQLException e) { | |||||
| System.err.println("JTDS驱动连接失败: " + e.getMessage()); | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| private void testMicrosoftConnection() { | |||||
| System.out.println("\n--- 测试Microsoft驱动 ---"); | |||||
| try { | |||||
| // 方法1: 最简单的连接方式 | |||||
| System.out.println("尝试方法1: 简单连接..."); | |||||
| String url1 = "jdbc:sqlserver://192.168.35.216:1433;DatabaseName=WY_DATAMANAGE20250731"; | |||||
| Properties props1 = new Properties(); | |||||
| props1.setProperty("user", "sa"); | |||||
| props1.setProperty("password", "sa"); | |||||
| Connection conn1 = DriverManager.getConnection(url1, props1); | |||||
| printConnectionInfo(conn1, "方法1"); | |||||
| conn1.close(); | |||||
| } catch (SQLException e1) { | |||||
| System.err.println("方法1失败: " + e1.getMessage()); | |||||
| try { | |||||
| // 方法2: 明确禁用SSL | |||||
| System.out.println("尝试方法2: 明确禁用SSL..."); | |||||
| String url2 = "jdbc:sqlserver://192.168.35.216:1433;DatabaseName=WY_DATAMANAGE20250731;encrypt=false;trustServerCertificate=true"; | |||||
| Properties props2 = new Properties(); | |||||
| props2.setProperty("user", "sa"); | |||||
| props2.setProperty("password", "sa"); | |||||
| props2.setProperty("encrypt", "false"); | |||||
| props2.setProperty("trustServerCertificate", "true"); | |||||
| Connection conn2 = DriverManager.getConnection(url2, props2); | |||||
| printConnectionInfo(conn2, "方法2"); | |||||
| conn2.close(); | |||||
| } catch (SQLException e2) { | |||||
| System.err.println("方法2失败: " + e2.getMessage()); | |||||
| try { | |||||
| // 方法3: 使用老版本的连接方式 | |||||
| System.out.println("尝试方法3: 老版本连接方式..."); | |||||
| String url3 = "jdbc:sqlserver://192.168.35.216:1433;DatabaseName=WY_DATAMANAGE20250731;SelectMethod=cursor;sendStringParametersAsUnicode=false"; | |||||
| Properties props3 = new Properties(); | |||||
| props3.setProperty("user", "sa"); | |||||
| props3.setProperty("password", "sa"); | |||||
| props3.setProperty("SelectMethod", "cursor"); | |||||
| props3.setProperty("sendStringParametersAsUnicode", "false"); | |||||
| Connection conn3 = DriverManager.getConnection(url3, props3); | |||||
| printConnectionInfo(conn3, "方法3"); | |||||
| conn3.close(); | |||||
| } catch (SQLException e3) { | |||||
| System.err.println("方法3失败: " + e3.getMessage()); | |||||
| try { | |||||
| // 方法4: 完全禁用所有SSL相关功能 | |||||
| System.out.println("尝试方法4: 完全禁用SSL..."); | |||||
| String url4 = "jdbc:sqlserver://192.168.35.216:1433;DatabaseName=WY_DATAMANAGE20250731;encrypt=false;trustServerCertificate=true;hostNameInCertificate=*;serverNameAsACE=false;sendStringParametersAsUnicode=false;loginTimeout=60;integratedSecurity=false;rewriteBatchedStatements=true;SelectMethod=cursor;validateBulkLoadParameters=false;sendTemporalDataTypesAsStringForBulkCopy=true;delayLoadingLobs=true;useNTLMV2=true;authenticationScheme=NativeAuthentication"; | |||||
| Properties props4 = new Properties(); | |||||
| props4.setProperty("user", "sa"); | |||||
| props4.setProperty("password", "sa"); | |||||
| props4.setProperty("encrypt", "false"); | |||||
| props4.setProperty("trustServerCertificate", "true"); | |||||
| props4.setProperty("hostNameInCertificate", "*"); | |||||
| props4.setProperty("serverNameAsACE", "false"); | |||||
| props4.setProperty("sendStringParametersAsUnicode", "false"); | |||||
| props4.setProperty("loginTimeout", "60"); | |||||
| props4.setProperty("integratedSecurity", "false"); | |||||
| props4.setProperty("rewriteBatchedStatements", "true"); | |||||
| props4.setProperty("SelectMethod", "cursor"); | |||||
| props4.setProperty("validateBulkLoadParameters", "false"); | |||||
| props4.setProperty("sendTemporalDataTypesAsStringForBulkCopy", "true"); | |||||
| props4.setProperty("delayLoadingLobs", "true"); | |||||
| props4.setProperty("useNTLMV2", "true"); | |||||
| props4.setProperty("authenticationScheme", "NativeAuthentication"); | |||||
| Connection conn4 = DriverManager.getConnection(url4, props4); | |||||
| printConnectionInfo(conn4, "方法4"); | |||||
| conn4.close(); | |||||
| } catch (SQLException e4) { | |||||
| System.err.println("方法4失败: " + e4.getMessage()); | |||||
| System.err.println("Microsoft驱动所有连接方法都失败了!"); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| private void printConnectionInfo(Connection conn, String method) throws SQLException { | |||||
| DatabaseMetaData metaData = conn.getMetaData(); | |||||
| System.out.println("✓ " + method + " 连接成功!"); | |||||
| System.out.println(" 数据库产品名称: " + metaData.getDatabaseProductName()); | |||||
| System.out.println(" 数据库版本: " + metaData.getDatabaseProductVersion()); | |||||
| System.out.println(" 驱动名称: " + metaData.getDriverName()); | |||||
| System.out.println(" 驱动版本: " + metaData.getDriverVersion()); | |||||
| System.out.println(" URL: " + metaData.getURL()); | |||||
| System.out.println(" 用户名: " + metaData.getUserName()); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,86 @@ | |||||
| package com.example.webapi.util; | |||||
| import javax.net.ssl.SSLContext; | |||||
| import javax.net.ssl.SSLSocketFactory; | |||||
| import java.security.Security; | |||||
| import java.util.Arrays; | |||||
| public class SSLTest { | |||||
| public static void main(String[] args) { | |||||
| if (args.length > 0 && "list-ciphers".equals(args[0])) { | |||||
| listCipherSuites(); | |||||
| } else { | |||||
| testSSLConfiguration(); | |||||
| } | |||||
| } | |||||
| public static void testSSLConfiguration() { | |||||
| System.out.println("=== SSL配置测试 ==="); | |||||
| try { | |||||
| // 获取默认的SSL上下文 | |||||
| SSLContext sslContext = SSLContext.getInstance("TLS"); | |||||
| sslContext.init(null, null, null); | |||||
| // 获取SSLSocketFactory | |||||
| SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); | |||||
| System.out.println("✓ SSL上下文创建成功"); | |||||
| System.out.println("✓ SSLSocketFactory创建成功"); | |||||
| // 检查系统属性 | |||||
| System.out.println("\n系统属性检查:"); | |||||
| System.out.println("jdk.tls.client.cipherSuites: " + System.getProperty("jdk.tls.client.cipherSuites")); | |||||
| System.out.println("jdk.tls.client.protocols: " + System.getProperty("jdk.tls.client.protocols")); | |||||
| System.out.println("https.protocols: " + System.getProperty("https.protocols")); | |||||
| System.out.println("jdk.tls.disabledAlgorithms: " + System.getProperty("jdk.tls.disabledAlgorithms")); | |||||
| // 检查SQL Server连接属性 | |||||
| System.out.println("\nSQL Server连接属性:"); | |||||
| System.out.println("encrypt: " + System.getProperty("com.microsoft.sqlserver.jdbc.SQLServerConnection.encrypt")); | |||||
| System.out.println("trustServerCertificate: " + System.getProperty("com.microsoft.sqlserver.jdbc.SQLServerConnection.trustServerCertificate")); | |||||
| System.out.println("\n✓ SSL配置测试完成"); | |||||
| } catch (Exception e) { | |||||
| System.err.println("✗ SSL配置测试失败: " + e.getMessage()); | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| public static void listCipherSuites() { | |||||
| System.out.println("=== 支持的密码套件 ==="); | |||||
| try { | |||||
| SSLContext sslContext = SSLContext.getInstance("TLS"); | |||||
| sslContext.init(null, null, null); | |||||
| SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); | |||||
| String[] defaultCipherSuites = sslSocketFactory.getDefaultCipherSuites(); | |||||
| String[] supportedCipherSuites = sslSocketFactory.getSupportedCipherSuites(); | |||||
| System.out.println("默认密码套件:"); | |||||
| for (String cipher : defaultCipherSuites) { | |||||
| if (!cipher.startsWith("TLS_DHE_")) { | |||||
| System.out.println(" ✓ " + cipher); | |||||
| } else { | |||||
| System.out.println(" ✗ " + cipher + " (已禁用)"); | |||||
| } | |||||
| } | |||||
| System.out.println("\n支持的密码套件:"); | |||||
| for (String cipher : supportedCipherSuites) { | |||||
| if (!cipher.startsWith("TLS_DHE_")) { | |||||
| System.out.println(" ✓ " + cipher); | |||||
| } else { | |||||
| System.out.println(" ✗ " + cipher + " (已禁用)"); | |||||
| } | |||||
| } | |||||
| } catch (Exception e) { | |||||
| System.err.println("获取密码套件失败: " + e.getMessage()); | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -6,21 +6,53 @@ server: | |||||
| spring: | spring: | ||||
| application: | application: | ||||
| name: fuquanapi | name: fuquanapi | ||||
| main: | |||||
| allow-bean-definition-overriding: true | |||||
| datasource: | datasource: | ||||
| url: jdbc:sqlserver://112.33.47.173:6789;SelectMethod=cursor;rewriteBatchedStatements=true;DatabaseName=ERPPlatForm2025_FQ_JK;encrypt=false;trustServerCertificate=true | |||||
| username: PlatForm_FuQ | |||||
| password: p|Rc9fZza[@XR-4 | |||||
| driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver | |||||
| # SQL Server数据源配置 | |||||
| sqlserver: | |||||
| # 西宁火车煤 - 备用配置 | |||||
| # url: jdbc:sqlserver://192.168.35.216:1433;SelectMethod=cursor;rewriteBatchedStatements=true;DatabaseName=WY_DATAMANAGE;encrypt=false;trustServerCertificate=true | |||||
| # username: sa | |||||
| # password: sa | |||||
| # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver | |||||
| url: jdbc:sqlserver://112.33.47.173:6789;SelectMethod=cursor;rewriteBatchedStatements=true;DatabaseName=WY_DATAMANAGE20250731;encrypt=false;trustServerCertificate=true | |||||
| username: admin | |||||
| password: admin@Erp2021 | |||||
| driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver | |||||
| # 连接池配置 | |||||
| hikari: | |||||
| maximum-pool-size: 10 | |||||
| minimum-idle: 5 | |||||
| connection-timeout: 30000 | |||||
| idle-timeout: 600000 | |||||
| max-lifetime: 1800000 | |||||
| # PostgreSQL数据源配置 | |||||
| postgresql: | |||||
| url: jdbc:postgresql://112.33.111.160:5432/auseft_web_stage | |||||
| username: postgres | |||||
| password: Auseft@2025qwer | |||||
| driver-class-name: org.postgresql.Driver | |||||
| # 连接池配置 | |||||
| hikari: | |||||
| maximum-pool-size: 10 | |||||
| minimum-idle: 5 | |||||
| connection-timeout: 30000 | |||||
| idle-timeout: 600000 | |||||
| max-lifetime: 1800000 | |||||
| jpa: | jpa: | ||||
| hibernate: | hibernate: | ||||
| ddl-auto: none | ddl-auto: none | ||||
| show-sql: true | show-sql: true | ||||
| properties: | properties: | ||||
| hibernate: | hibernate: | ||||
| dialect: org.hibernate.dialect.SQLServer2012Dialect | |||||
| dialect: org.hibernate.dialect.SQLServer2008Dialect | |||||
| format_sql: true | format_sql: true | ||||
| physical_naming_strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl | physical_naming_strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl | ||||
| use_sql_comments: true | use_sql_comments: true | ||||
| # 禁用默认数据源自动配置 | |||||
| open-in-view: false | |||||
| jackson: | jackson: | ||||
| date-format: yyyy-MM-dd HH:mm:ss | date-format: yyyy-MM-dd HH:mm:ss | ||||
| time-zone: GMT+8 | time-zone: GMT+8 | ||||
| @@ -40,3 +72,5 @@ logging: | |||||
| com.example.webapi: DEBUG | com.example.webapi: DEBUG | ||||
| pattern: | pattern: | ||||
| console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" | console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" | ||||
| # Swagger配置 - Swagger2不需要额外配置 | |||||