Browse Source

7.8导出修复

huangqizheng/feature-20250708175155-7.8bug修复
huangqizhen 1 month ago
parent
commit
b6d976c527
  1. 32
      src/main/java/com/example/demo/Mysql/MysqlController.java
  2. 9
      src/main/java/com/example/demo/Mysql/MysqlService.java
  3. 64
      src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java
  4. 13
      src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java
  5. 63
      src/main/java/com/example/demo/config/SqlServer1DataSourceConfig.java
  6. 2
      src/main/java/com/example/demo/domain/DTO/GoldDetailDTO.java
  7. 52
      src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java
  8. 11
      src/main/resources/application.yml

32
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: 202507-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();
// }
//}

9
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: 202507-08 15:52
@Version 1.0
**/public interface MysqlService {
}

64
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);
// }
// }
//}

13
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() {

63
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();
// }
//}

2
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;

52
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;
}

11
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

Loading…
Cancel
Save