diff --git a/src/main/java/com/example/demo/Mysql/MysqlController.java b/src/main/java/com/example/demo/Mysql/MysqlController.java new file mode 100644 index 0000000..b7fb131 --- /dev/null +++ b/src/main/java/com/example/demo/Mysql/MysqlController.java @@ -0,0 +1,32 @@ +//package com.example.demo.Mysql; +// +//import com.example.demo.domain.vo.Result; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.CrossOrigin; +//import org.springframework.web.bind.annotation.RequestMapping; +//import org.springframework.web.bind.annotation.RestController; +// +///** +// * @program: GOLD +// * @ClassName MysqlController +// * @description: +// * @author: huangqizhen +// * @create: 2025−07-08 15:50 +// * @Version 1.0 +// **/ +//@RestController +//@RequestMapping("/Mysql") +//@RequiredArgsConstructor +//@Slf4j +//@CrossOrigin +//public class MysqlController { +// @Autowired +// MysqlService mysqlService; +// @RequestMapping +// public Result Mysql () throws Exception { +// mysqlService.getSqlserverData(); +// return Result.success(); +// } +//} diff --git a/src/main/java/com/example/demo/Mysql/MysqlService.java b/src/main/java/com/example/demo/Mysql/MysqlService.java new file mode 100644 index 0000000..ae1c5c5 --- /dev/null +++ b/src/main/java/com/example/demo/Mysql/MysqlService.java @@ -0,0 +1,9 @@ +package com.example.demo.Mysql;/** +@program: GOLD +@ClassName MysqlService +@description: +@author: huangqizhen +@create: 2025−07-08 15:52 +@Version 1.0 + **/public interface MysqlService { +} diff --git a/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java b/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java new file mode 100644 index 0000000..5afd64c --- /dev/null +++ b/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java @@ -0,0 +1,64 @@ +//package com.example.demo.Mysql; +// +//import com.example.demo.Mysql.MysqlService; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Qualifier; +//import org.springframework.scheduling.annotation.Scheduled; +//import org.springframework.stereotype.Service; +// +//import javax.sql.DataSource; +//import java.sql.*; +//import java.time.LocalDateTime; +// +//@Service +//public class MysqlServiceImpl implements MysqlService { +// +// private static final Logger logger = LoggerFactory.getLogger(MysqlServiceImpl.class); +// +// private final DataSource sqlServerDataSource; +// private final DataSource mysqlDataSource; +// +// public MysqlServiceImpl(@Qualifier("sqlServerDataSource") DataSource sqlServerDataSource, +// @Qualifier("mysqlDataSource") DataSource mysqlDataSource) { +// this.sqlServerDataSource = sqlServerDataSource; +// this.mysqlDataSource = mysqlDataSource; +// } +// +// @Override +// @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 +// public void getSqlserverData() { +// logger.info("开始从 SQL Server 同步数据到 MySQL..."); +// try (Connection sqlServerConn = sqlServerDataSource.getConnection(); +// Connection mysqlConn = mysqlDataSource.getConnection()) { +// +// // 从 SQL Server 查询数据 +// String querySql = "SELECT gtype,jwcode, created_at FROM user_gold_records WHERE created_at > ?"; +// try (PreparedStatement sqlServerStmt = sqlServerConn.prepareStatement(querySql)) { +// sqlServerStmt.setTimestamp(1, Timestamp.valueOf(LocalDateTime.now().minusHours(1))); // 获取最近一小时的数据 +// ResultSet resultSet = sqlServerStmt.executeQuery(); +// +// // 插入到 MySQL +// String insertSql = "INSERT INTO target_table (id, name, created_at) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE name = ?"; +// try (PreparedStatement mysqlStmt = mysqlConn.prepareStatement(insertSql)) { +// while (resultSet.next()) { +// int id = resultSet.getInt("id"); +// String name = resultSet.getString("name"); +// Timestamp createdAt = resultSet.getTimestamp("created_at"); +// +// mysqlStmt.setInt(1, id); +// mysqlStmt.setString(2, name); +// mysqlStmt.setTimestamp(3, createdAt); +// mysqlStmt.setString(4, name); // 更新时的值 +// mysqlStmt.addBatch(); +// } +// mysqlStmt.executeBatch(); // 批量插入 +// } +// } +// logger.info("数据同步完成"); +// } catch (SQLException e) { +// logger.error("数据同步失败", e); +// throw new RuntimeException("数据同步失败", e); +// } +// } +//} \ No newline at end of file diff --git a/src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java b/src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java index 87d2af2..be58aa2 100644 --- a/src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java +++ b/src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java @@ -18,19 +18,6 @@ import javax.sql.DataSource; @Configuration public class Mysql1DataSourceConfig { -// @Bean(name = "mysql1DataSource") -//// @Primary -// public DataSource mysql1DataSource() { -// HikariDataSource dataSource = new HikariDataSource(); -// dataSource.setJdbcUrl("jdbc:mysql://54.251.137.151:10701/hwgold?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=UTF-8"); -// dataSource.setUsername("hwgold"); -// dataSource.setPassword("AGX4Z3YMxiCG3GR2"); -// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); -// dataSource.setMaximumPoolSize(10); -// dataSource.setPoolName("mysql1HikariCP"); -// log.info("mysql1 DataSource initialized with pool-name: {}", dataSource.getPoolName()); -// return dataSource; -// } @Bean(name = "mysql1DataSource") @ConfigurationProperties(prefix = "spring.datasource.mysql1") public DataSource mysql2DataSource() { diff --git a/src/main/java/com/example/demo/config/SqlServer1DataSourceConfig.java b/src/main/java/com/example/demo/config/SqlServer1DataSourceConfig.java new file mode 100644 index 0000000..486b9d6 --- /dev/null +++ b/src/main/java/com/example/demo/config/SqlServer1DataSourceConfig.java @@ -0,0 +1,63 @@ +//package com.example.demo.config; +// +//import com.zaxxer.hikari.HikariDataSource; +//import lombok.extern.slf4j.Slf4j; +//import org.apache.ibatis.session.SqlSessionFactory; +//import org.mybatis.spring.SqlSessionFactoryBean; +//import org.mybatis.spring.SqlSessionTemplate; +//import org.springframework.beans.factory.annotation.Qualifier; +//import org.springframework.boot.context.properties.ConfigurationProperties; +//import org.springframework.boot.jdbc.DataSourceBuilder; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +// +//import javax.sql.DataSource; +// +//@Slf4j +//@Configuration +//public class SqlServer1DataSourceConfig { +// +// /** +// * 定义 SQL Server 数据源 +// */ +// @Bean(name = "sqlserver1DataSource") +// @ConfigurationProperties(prefix = "spring.datasource.sqlserver1") +// public DataSource sqlserver1DataSource() { +// log.info("Initializing SQL Server data source..."); +// return DataSourceBuilder.create().type(HikariDataSource.class).build(); +// } +// +// /** +// * 定义 SQL Server 的 SqlSessionFactory +// */ +// @Bean(name = "sqlserver1SqlSessionFactory") +// public SqlSessionFactory sqlserver1SqlSessionFactory(@Qualifier("sqlserver1DataSource") DataSource dataSource, +// @Qualifier("globalConfiguration1") org.apache.ibatis.session.Configuration globalConfiguration) throws Exception { +// log.info("Initializing SQL Server SqlSessionFactory..."); +// SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); +// sessionFactory.setDataSource(dataSource); +// sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/sqlserver/*.xml")); +// sessionFactory.setConfiguration(globalConfiguration); +// return sessionFactory.getObject(); +// } +// +// /** +// * 定义 SQL Server 的 SqlSessionTemplate +// */ +// @Bean(name = "sqlserver1SqlSessionTemplate") +// public SqlSessionTemplate sqlserver1SqlSessionTemplate(@Qualifier("sqlserver1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { +// log.info("Initializing SQL Server SqlSessionTemplate..."); +// return new SqlSessionTemplate(sqlSessionFactory); +// } +// +// /** +// * 定义全局 MyBatis 配置 +// */ +// @Bean +// @ConfigurationProperties(prefix = "mybatis.configuration.sqlserver1") +// public org.apache.ibatis.session.Configuration globalConfiguration() { +// log.info("Initializing SQL Server MyBatis global configuration..."); +// return new org.apache.ibatis.session.Configuration(); +// } +//} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/DTO/GoldDetailDTO.java b/src/main/java/com/example/demo/domain/DTO/GoldDetailDTO.java index b03acca..99b777b 100644 --- a/src/main/java/com/example/demo/domain/DTO/GoldDetailDTO.java +++ b/src/main/java/com/example/demo/domain/DTO/GoldDetailDTO.java @@ -1,5 +1,6 @@ package com.example.demo.domain.DTO; +import com.example.demo.domain.vo.GoldDetail; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; @@ -28,6 +29,7 @@ public class GoldDetailDTO { private String text = ""; //关键词搜索 private Integer dataNum = 0; private String deptid = ""; + private GoldDetail goldDetail; @NotNull(message = "page不能为空") private Integer page = 1; diff --git a/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java index 9e425ed..1f8f510 100644 --- a/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java @@ -31,6 +31,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.*; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; @@ -63,7 +66,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { @Override public Exception handleExcelExportData(String message) throws Exception { System.out.println("明细导出excel数据开始执行:" + message); - long startTime = System.currentTimeMillis(); + long sTime = System.currentTimeMillis(); Long recordId = null; String fileName = null; File tempFile = null; @@ -86,11 +89,38 @@ public class ExportExcelServiceImpl implements ExportExcelService { // 初始化临时文件(保存到本地临时目录) tempFile = File.createTempFile("export_", ".xlsx"); outputStream = new FileOutputStream(tempFile); // 使用文件输出流 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 从JSON中提取单个值 - String text = requestDataNode.has("text") ? requestDataNode.get("text").asText() : null; - Integer sort = requestDataNode.has("sort") ? requestDataNode.get("sort").asInt() : null; - String field = requestDataNode.has("field") ? requestDataNode.get("field").asText() : null; - String deptId = requestDataNode.has("deptId") ? requestDataNode.get("deptId").asText() : null; +// String text = requestDataNode.has("text") ? requestDataNode.get("text").asText() : null; +// Integer sort = requestDataNode.has("sort") ? requestDataNode.get("sort").asInt() : null; +// String field = requestDataNode.has("field") ? requestDataNode.get("field").asText() : null; +// String deptId = requestDataNode.has("deptId") ? requestDataNode.get("deptId").asText() : null; + Integer jwcode = requestDataNode.has("jwcode") ? requestDataNode.get("jwcode").asInt() : null; + String payPlatform = requestDataNode.has("payPlatform") ? requestDataNode.get("payPlatform").asText() : null; + Integer type = requestDataNode.has("type") ? requestDataNode.get("type").asInt() : null; + String market = requestDataNode.has("market") ? requestDataNode.get("market").asText() : null; + Date startTime = null; + if (requestDataNode.has("startTime")) { + String startTimeStr = requestDataNode.get("startTime").asText(); + try { + startTime = dateFormat.parse(startTimeStr); + } catch (ParseException e) { + System.err.println("无法解析 startTime: " + startTimeStr); + e.printStackTrace(); + } + } + + // 解析 endTime + Date endTime = null; + if (requestDataNode.has("endTime")) { + String endTimeStr = requestDataNode.get("endTime").asText(); + try { + endTime = dateFormat.parse(endTimeStr); + } catch (ParseException e) { + System.err.println("无法解析 endTime: " + endTimeStr); + e.printStackTrace(); + } + } try { // 6. 初始化Excel写入器(指向本地文件流) @@ -101,6 +131,14 @@ public class ExportExcelServiceImpl implements ExportExcelService { page.setPageNum(1); page.setPageSize(1000); Integer totalCount = 0; + GoldDetail goldDetail = new GoldDetail(); + goldDetail.setJwcode(jwcode); + goldDetail.setPayPlatform(payPlatform); + goldDetail.setType(type); + goldDetail.setMarket(market); + goldDetail.setStartTime(startTime); + goldDetail.setEndTime(endTime); + page.setGoldDetail(goldDetail); boolean hasMore = true; while (hasMore) { Result pageResult = goldDetailController.getGoldDetail(page); @@ -252,8 +290,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { throw new Exception("删除临时文件失败", e); } } - long endTime = System.currentTimeMillis(); - log.info("导出任务完成,耗时: {}毫秒", (endTime - startTime)); + long eTime = System.currentTimeMillis(); + log.info("导出任务完成,耗时: {}毫秒", (eTime - sTime)); } return null; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index bb5201b..7ad8bd3 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -43,6 +43,14 @@ spring: # hikari: # pool-name: mysql2HikariCP # maximum-pool-size: 10 +# sqlserver1: +# jdbc-url: jdbc:sqlserver://52.76.43.43:1433/hwhcGold?serverTimezone=Asia/Shanghai +# username: hwhc_gold_query +# password: hwhc_gold_query4564jkj +# driver-class-name: com.mysql.cj.jdbc.Driver +# hikari: +# pool-name: mysql2HikariCP +# maximum-pool-size: 10 application: name: demo @@ -77,6 +85,9 @@ mybatis: mysql1: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +# sqlserver1: +# map-underscore-to-camel-case: true +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # mysql2: # map-underscore-to-camel-case: true # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl