From b6d976c5276f23bd874906600ed3b4bd38af6cd7 Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Tue, 8 Jul 2025 17:52:33 +0800 Subject: [PATCH 1/8] =?UTF-8?q?7.8=E5=AF=BC=E5=87=BA=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/Mysql/MysqlController.java | 32 +++++++++++ .../java/com/example/demo/Mysql/MysqlService.java | 9 +++ .../com/example/demo/Mysql/MysqlServiceImpl.java | 64 ++++++++++++++++++++++ .../demo/config/Mysql1DataSourceConfig.java | 13 ----- .../demo/config/SqlServer1DataSourceConfig.java | 63 +++++++++++++++++++++ .../com/example/demo/domain/DTO/GoldDetailDTO.java | 2 + .../demo/serviceImpl/ExportExcelServiceImpl.java | 52 +++++++++++++++--- src/main/resources/application.yml | 11 ++++ 8 files changed, 226 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/example/demo/Mysql/MysqlController.java create mode 100644 src/main/java/com/example/demo/Mysql/MysqlService.java create mode 100644 src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java create mode 100644 src/main/java/com/example/demo/config/SqlServer1DataSourceConfig.java 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 From e598198d4b034f193f4766c61d0288d1917c9d16 Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Tue, 8 Jul 2025 19:02:31 +0800 Subject: [PATCH 2/8] =?UTF-8?q?7.8=E5=AF=BC=E5=87=BA=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/Export/ExportServiceImpl.java | 4 ++ .../com/example/demo/domain/DTO/ConsumeDTO.java | 14 +++---- .../com/example/demo/domain/DTO/GoldDetailDTO.java | 14 +++---- .../com/example/demo/domain/DTO/GoldUserDTO.java | 16 ++++---- .../com/example/demo/domain/DTO/RechargeDTO.java | 16 ++++---- .../com/example/demo/domain/DTO/RefundDTO.java | 16 ++++---- .../demo/serviceImpl/ExportExcelServiceImpl.java | 47 +++++++++++++--------- .../demo/serviceImpl/GoldDetailServiceImpl.java | 3 ++ 8 files changed, 76 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index bdce7f0..a98568e 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -57,6 +57,7 @@ public class ExportServiceImpl implements ExportService{ dto.setUrl(""); dto.setFileName(fileName); dto.setDataNum(0); + try{ // 调用方式 GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder(); @@ -81,6 +82,7 @@ public class ExportServiceImpl implements ExportService{ requestData.put("sort", dto.getSort()); requestData.put("field", dto.getField()); requestData.put("deptId", dto.getDeptid()); + requestData.put("RechargeUser", dto.getRechargeUser()); exportData.put("requestData", requestData); // 3. 发送到 Redis 消息队列 @@ -137,6 +139,7 @@ public class ExportServiceImpl implements ExportService{ requestData.put("sort", dto.getSort()); requestData.put("field", dto.getField()); requestData.put("deptId", dto.getDeptid()); + requestData.put("RefundUser", dto.getRefundUser()); exportData.put("requestData", requestData); // 3. 发送到 Redis 消息队列 @@ -193,6 +196,7 @@ public class ExportServiceImpl implements ExportService{ requestData.put("sort", dto.getSort()); requestData.put("field", dto.getField()); requestData.put("deptId", dto.getDeptid()); + requestData.put("ConsumeUser", dto.getConsumeUser()); exportData.put("requestData", requestData); // 3. 发送到 Redis 消息队列 diff --git a/src/main/java/com/example/demo/domain/DTO/ConsumeDTO.java b/src/main/java/com/example/demo/domain/DTO/ConsumeDTO.java index a2eb47a..efc7e18 100644 --- a/src/main/java/com/example/demo/domain/DTO/ConsumeDTO.java +++ b/src/main/java/com/example/demo/domain/DTO/ConsumeDTO.java @@ -34,11 +34,11 @@ public class ConsumeDTO { private Integer pageSize = 20; private ConsumeUser consumeUser; - @Override - public String toString() { - return String.format( - "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", - account, type, state, dataNum - ); - } +// @Override +// public String toString() { +// return String.format( +// "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", +// account, type, state, dataNum +// ); +// } } 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 99b777b..dc0b518 100644 --- a/src/main/java/com/example/demo/domain/DTO/GoldDetailDTO.java +++ b/src/main/java/com/example/demo/domain/DTO/GoldDetailDTO.java @@ -36,11 +36,11 @@ public class GoldDetailDTO { @NotNull(message = "pageSize不能为空") private Integer pageSize = 20; - @Override - public String toString() { - return String.format( - "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", - account, type, state, dataNum - ); - } +// @Override +// public String toString() { +// return String.format( +// "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", +// account, type, state, dataNum +// ); +// } } diff --git a/src/main/java/com/example/demo/domain/DTO/GoldUserDTO.java b/src/main/java/com/example/demo/domain/DTO/GoldUserDTO.java index 0087f6f..1ca77f6 100644 --- a/src/main/java/com/example/demo/domain/DTO/GoldUserDTO.java +++ b/src/main/java/com/example/demo/domain/DTO/GoldUserDTO.java @@ -1,5 +1,6 @@ package com.example.demo.domain.DTO; +import com.example.demo.domain.entity.User; import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.NoArgsConstructor; @@ -26,17 +27,18 @@ public class GoldUserDTO { private String text = ""; //关键词搜索 private Integer dataNum = 0; private String deptid = ""; + private User user; @NotNull(message = "page不能为空") private Integer page = 1; @NotNull(message = "pageSize不能为空") private Integer pageSize = 20; - @Override - public String toString() { - return String.format( - "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", - account, type, state, dataNum - ); - } +// @Override +// public String toString() { +// return String.format( +// "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", +// account, type, state, dataNum +// ); +// } } diff --git a/src/main/java/com/example/demo/domain/DTO/RechargeDTO.java b/src/main/java/com/example/demo/domain/DTO/RechargeDTO.java index d9608c4..d7bdedf 100644 --- a/src/main/java/com/example/demo/domain/DTO/RechargeDTO.java +++ b/src/main/java/com/example/demo/domain/DTO/RechargeDTO.java @@ -1,5 +1,6 @@ package com.example.demo.domain.DTO; +import com.example.demo.domain.vo.RechargeUser; import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.NoArgsConstructor; @@ -27,17 +28,18 @@ public class RechargeDTO { private String text = ""; //关键词搜索 private Integer dataNum = 0; private String deptid = ""; + private RechargeUser rechargeUser; @NotNull(message = "page不能为空") private Integer page = 1; @NotNull(message = "pageSize不能为空") private Integer pageSize = 20; - @Override - public String toString() { - return String.format( - "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", - account, type, state, dataNum - ); - } +// @Override +// public String toString() { +// return String.format( +// "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", +// account, type, state, dataNum +// ); +// } } diff --git a/src/main/java/com/example/demo/domain/DTO/RefundDTO.java b/src/main/java/com/example/demo/domain/DTO/RefundDTO.java index dcd232d..94664d7 100644 --- a/src/main/java/com/example/demo/domain/DTO/RefundDTO.java +++ b/src/main/java/com/example/demo/domain/DTO/RefundDTO.java @@ -1,5 +1,6 @@ package com.example.demo.domain.DTO; +import com.example.demo.domain.vo.RefundUser; import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.NoArgsConstructor; @@ -26,17 +27,18 @@ public class RefundDTO { private String text = ""; //关键词搜索 private Integer dataNum = 0; private String deptid = ""; + private RefundUser refundUser; @NotNull(message = "page不能为空") private Integer page = 1; @NotNull(message = "pageSize不能为空") private Integer pageSize = 20; - @Override - public String toString() { - return String.format( - "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", - account, type, state, dataNum - ); - } +// @Override +// public String toString() { +// return String.format( +// "AiEmotionExport(account=%d, type=%d, state=%d, dataNum=%d)", +// account, type, state, dataNum +// ); +// } } diff --git a/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java index 1f8f510..56dc0e6 100644 --- a/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java @@ -79,6 +79,9 @@ public class ExportExcelServiceImpl implements ExportExcelService { // 2. 获取基本参数 recordId = rootNode.path("recordId").asLong(); JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode goldDetailNode = requestDataNode.path("goldDetail"); + GoldDetail goldDetail = objectMapper.treeToValue(goldDetailNode, GoldDetail.class); + // 3. 验证导出记录 AiEmotionExportRecordVO record = validateExportRecord(recordId); if (record == null) return null; @@ -95,10 +98,10 @@ public class ExportExcelServiceImpl implements ExportExcelService { // 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; +// 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(); @@ -131,13 +134,6 @@ 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) { @@ -315,6 +311,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { // 2. 获取基本参数 recordId = rootNode.path("recordId").asLong(); JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode userNode = requestDataNode.path("user"); + User user = objectMapper.treeToValue(userNode, User.class); // 3. 验证导出记录 AiEmotionExportRecordVO record = validateExportRecord(recordId); if (record == null) return null; @@ -326,10 +324,11 @@ public class ExportExcelServiceImpl implements ExportExcelService { tempFile = File.createTempFile("export_", ".xlsx"); outputStream = new FileOutputStream(tempFile); // 使用文件输出流 // 从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; + try { // 6. 初始化Excel写入器(指向本地文件流) @@ -339,6 +338,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { Page page = new Page(); page.setPageNum(1); page.setPageSize(1000); + page.setUser(user); Integer totalCount = 0; boolean hasMore = true; while (hasMore) { @@ -514,6 +514,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { // 2. 获取基本参数 recordId = rootNode.path("recordId").asLong(); JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode rechargeNode = requestDataNode.path("rechargeUser"); + RechargeUser rechargeUser = objectMapper.treeToValue(rechargeNode, RechargeUser.class); // 3. 验证导出记录 AiEmotionExportRecordVO record = validateExportRecord(recordId); if (record == null) return null; @@ -525,10 +527,10 @@ public class ExportExcelServiceImpl implements ExportExcelService { tempFile = File.createTempFile("export_", ".xlsx"); outputStream = new FileOutputStream(tempFile); // 使用文件输出流 // 从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; try { // 6. 初始化Excel写入器(指向本地文件流) @@ -539,6 +541,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { page.setPageNum(1); page.setPageSize(1000); Integer totalCount = 0; + page.setRechargeUser(rechargeUser); boolean hasMore = true; while (hasMore) { Result pageResult = rechargeController.selcetBy( page); @@ -713,6 +716,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { // 2. 获取基本参数 recordId = rootNode.path("recordId").asLong(); JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode consumeUserNode = requestDataNode.path("consumeUser"); + ConsumeUser consumeUser = objectMapper.treeToValue(consumeUserNode, ConsumeUser.class); // 3. 验证导出记录 AiEmotionExportRecordVO record = validateExportRecord(recordId); if (record == null) return null; @@ -737,6 +742,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { Page page = new Page(); page.setPageNum(1); page.setPageSize(1000); + page.setConsumeUser(consumeUser); Integer totalCount = 0; boolean hasMore = true; while (hasMore) { @@ -912,6 +918,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { // 2. 获取基本参数 recordId = rootNode.path("recordId").asLong(); JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode refundUserNode = requestDataNode.path("refundUser"); + RefundUser refundUser = objectMapper.treeToValue(refundUserNode, RefundUser.class); // 3. 验证导出记录 AiEmotionExportRecordVO record = validateExportRecord(recordId); if (record == null) return null; @@ -936,6 +944,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { Page page = new Page(); page.setPageNum(1); page.setPageSize(1000); + page.setRefundUser(refundUser); Integer totalCount = 0; boolean hasMore = true; while (hasMore) { diff --git a/src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java index 4e73d24..98fa424 100644 --- a/src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java @@ -133,6 +133,7 @@ public class GoldDetailServiceImpl implements GoldDetailService { dto.setUrl(""); dto.setFileName(fileName); dto.setDataNum(0); + try{ // 调用方式 GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder(); @@ -157,6 +158,7 @@ public class GoldDetailServiceImpl implements GoldDetailService { requestData.put("sort", dto.getSort()); requestData.put("field", dto.getField()); requestData.put("deptId", dto.getDeptid()); + requestData.put("goldDetail", dto.getGoldDetail()); exportData.put("requestData", requestData); // 3. 发送到 Redis 消息队列 @@ -213,6 +215,7 @@ public class GoldDetailServiceImpl implements GoldDetailService { requestData.put("sort", dto.getSort()); requestData.put("field", dto.getField()); requestData.put("deptId", dto.getDeptid()); + requestData.put("user", dto.getUser()); exportData.put("requestData", requestData); // 3. 发送到 Redis 消息队列 From f0db83bf61a8e063b0566722f9a6ceb56d6ae439 Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Wed, 9 Jul 2025 14:11:18 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E9=80=80=E6=AC=BE=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/domain/vo/ConsumeUser.java | 1 + .../java/com/example/demo/serviceImpl/RefundServiceImpl.java | 10 ++++++++++ src/main/resources/mapper/ConsumeMapper.xml | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/demo/domain/vo/ConsumeUser.java b/src/main/java/com/example/demo/domain/vo/ConsumeUser.java index d2370ce..9b6f364 100644 --- a/src/main/java/com/example/demo/domain/vo/ConsumeUser.java +++ b/src/main/java/com/example/demo/domain/vo/ConsumeUser.java @@ -37,6 +37,7 @@ public class ConsumeUser implements Serializable { private String remark; // 备注 private Integer adminId; //提交人Id private String adminName; //提交人姓名 + private Integer isRefund; //是否退款 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date createTime; // 消费时间 diff --git a/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java index 5b5ecc2..085a575 100644 --- a/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java @@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.Console; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -95,6 +96,7 @@ public class RefundServiceImpl implements RefundService { @Transactional @Override public Result add(RefundUser refundUser) { + System.out.println("11111111111111111111"); if (refundUser.getTaskGold() == null || refundUser.getFreeGold() == null || refundUser.getPermanentGold() == null) { return Result.error("金币不能为空"); } @@ -150,6 +152,14 @@ public class RefundServiceImpl implements RefundService { List list = consumeMapper.selectOrderCodeByJwcode(userGoldRecord.getJwcode().toString(), orderCode); if (list == null || list.isEmpty()) { return Result.error("该用户没有该订单号"); + }else if(list.size()==1){ + ConsumeUser consumeUser = list.getFirst(); + if(consumeUser.getIsRefund().equals(1)) + { + return Result.error("该订单已被退款"); + } + }else { + return Result.error("消费订单重复"); } refundMapper.add(userGoldRecord); consumeMapper.updateIsRefund(orderCode); diff --git a/src/main/resources/mapper/ConsumeMapper.xml b/src/main/resources/mapper/ConsumeMapper.xml index ce5134c..8263303 100644 --- a/src/main/resources/mapper/ConsumeMapper.xml +++ b/src/main/resources/mapper/ConsumeMapper.xml @@ -134,7 +134,8 @@