diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index bdce7f0..78cc419 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/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/controller/WorkbenchController.java b/src/main/java/com/example/demo/controller/WorkbenchController.java index f6fcf8c..bad46b7 100644 --- a/src/main/java/com/example/demo/controller/WorkbenchController.java +++ b/src/main/java/com/example/demo/controller/WorkbenchController.java @@ -54,18 +54,14 @@ public class WorkbenchController { WorkbenchCard result =workbenchService.getGraph(workbench.getToken(),workbench.getStartDate(),workbench.getEndDate(),workbench.getMarkets()); return ResponseEntity.ok(result); } - /* - 测试一段时间内的统计数据 - */ - /* @PostMapping("testSum") - public Statistics testSum( @RequestBody TestRequest request){ - String market = request.getMarket(); - Date date = request.getDate(); - - - //获取传入日期所在周的周一 - Date thisWeekStart = workbenchService.getStartOfWeek(date); - - return statisticsMapper.selectSumByMarketAndDate(market, thisWeekStart, date); - }*/ + /* + 更新统计表并获取卡片数据 + */ + @PostMapping("updateCard") + public ResponseEntity updateCard(@RequestBody WorkbenchCard workbench){ + statisticsService.runHourlyTaskPart1(); //更新余量数据 + statisticsService.runHourlyTaskPart2(); //更新余量外数据 + WorkbenchCard result =workbenchService.getCard(workbench.getToken()); //获取卡片数据 + return ResponseEntity.ok(result); + } } 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 b03acca..dc0b518 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,17 +29,18 @@ public class GoldDetailDTO { private String text = ""; //关键词搜索 private Integer dataNum = 0; private String deptid = ""; + private GoldDetail goldDetail; @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/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/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/domain/vo/RechargeAudit.java b/src/main/java/com/example/demo/domain/vo/RechargeAudit.java index d1a5cac..546f2c4 100644 --- a/src/main/java/com/example/demo/domain/vo/RechargeAudit.java +++ b/src/main/java/com/example/demo/domain/vo/RechargeAudit.java @@ -35,6 +35,7 @@ public class RechargeAudit { private Integer freeGold; // 免费金币 private Integer freeJune; // 6月免费金币 private Integer freeDecember; // 12月免费金币 + private Integer rateId; //汇率id private String remark; // 备注 private String payModel; //支付方式 private String voucher; //支付凭证 diff --git a/src/main/java/com/example/demo/domain/vo/RechargeUser.java b/src/main/java/com/example/demo/domain/vo/RechargeUser.java index 1ae120c..3310d7c 100644 --- a/src/main/java/com/example/demo/domain/vo/RechargeUser.java +++ b/src/main/java/com/example/demo/domain/vo/RechargeUser.java @@ -18,7 +18,6 @@ import java.util.Date; @Data @NoArgsConstructor -@AllArgsConstructor public class RechargeUser { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/example/demo/service/AdminService.java b/src/main/java/com/example/demo/service/AdminService.java index 8f24f2d..4c253ba 100644 --- a/src/main/java/com/example/demo/service/AdminService.java +++ b/src/main/java/com/example/demo/service/AdminService.java @@ -12,4 +12,6 @@ import com.example.demo.domain.entity.Admin; **/ public interface AdminService { Admin login(Admin admin)throws Exception; + + Integer selectId(String account); } diff --git a/src/main/java/com/example/demo/service/StatisticsService.java b/src/main/java/com/example/demo/service/StatisticsService.java index fe06f8e..dc86550 100644 --- a/src/main/java/com/example/demo/service/StatisticsService.java +++ b/src/main/java/com/example/demo/service/StatisticsService.java @@ -15,9 +15,9 @@ import java.util.Date; public interface StatisticsService { - //1点,12点,18点,23点30分执行定时任务更新当天part1数据 + //每小时执行定时任务更新当天part1数据 public void runHourlyTaskPart1(); - //12点,18点执行定时任务更新当天part2数据 + //每小时执行定时任务更新当天part2数据 public void runHourlyTaskPart2(); //0点执行定时任务更新近一周part2数据 public void runDailyTaskPart2(); diff --git a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java index b952fb5..795db9c 100644 --- a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java @@ -55,6 +55,12 @@ public class AdminServiceImpl implements AdminService { } } + @Override + public Integer selectId(String account) { + Admin admin = adminMapper.getAdmin(account); + return admin.getId(); + } + private boolean hasPermissionToMachine(Admin admin, String targetMachineId) { if (targetMachineId == null || admin.getMachineId() == null) { return false; diff --git a/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java index 851fc95..cc44907 100644 --- a/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java @@ -78,6 +78,7 @@ public class AuditServiceImpl implements AuditService { update.setCurrentFreeJune(order.getFreeJune()); //当前六月免费金币 update.setCurrentFreeDecember(order.getFreeDecember()); //当前十二月免费金币 update.setCurrentTaskGold(order.getTaskGold()); //当前任务金币 + update.setRechargeNum(update.getRechargeNum()+1); //充值次数加一 auditMapper.updateUserGold(update); //erp增加充值数据 if(update.getJwcode().equals(94226013)){ diff --git a/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java index 9e425ed..56dc0e6 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; @@ -76,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; @@ -86,11 +92,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 +134,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { page.setPageNum(1); page.setPageSize(1000); Integer totalCount = 0; + page.setGoldDetail(goldDetail); boolean hasMore = true; while (hasMore) { Result pageResult = goldDetailController.getGoldDetail(page); @@ -252,8 +286,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; } @@ -277,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; @@ -288,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写入器(指向本地文件流) @@ -301,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) { @@ -476,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; @@ -487,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写入器(指向本地文件流) @@ -501,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); @@ -675,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; @@ -699,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) { @@ -874,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; @@ -898,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 消息队列 diff --git a/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java index 5b5ecc2..3c5b9e9 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; @@ -150,6 +151,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/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 diff --git a/src/main/resources/mapper/AuditMapper.xml b/src/main/resources/mapper/AuditMapper.xml index aacbef8..fd57882 100644 --- a/src/main/resources/mapper/AuditMapper.xml +++ b/src/main/resources/mapper/AuditMapper.xml @@ -61,6 +61,9 @@ AND ugr.pay_model = #{rechargeAudit.payModel} + + AND ugr.rate_id = #{rechargeAudit.rateId} + AND u.market = #{rechargeAudit.market} 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 @@