Browse Source

Merge branch 'milestone-20250702-金币重构一期' of http://39.101.133.168:8807/huangqizhen/gold-java into milestone-20250702-金币重构一期

lihuilin/hotfix-20250810160509-余额地区传参
lihuilin 1 month ago
parent
commit
7a71dfa488
  1. 4
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  2. 32
      src/main/java/com/example/demo/Mysql/MysqlController.java
  3. 9
      src/main/java/com/example/demo/Mysql/MysqlService.java
  4. 64
      src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java
  5. 13
      src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java
  6. 63
      src/main/java/com/example/demo/config/SqlServer1DataSourceConfig.java
  7. 24
      src/main/java/com/example/demo/controller/WorkbenchController.java
  8. 14
      src/main/java/com/example/demo/domain/DTO/ConsumeDTO.java
  9. 16
      src/main/java/com/example/demo/domain/DTO/GoldDetailDTO.java
  10. 16
      src/main/java/com/example/demo/domain/DTO/GoldUserDTO.java
  11. 16
      src/main/java/com/example/demo/domain/DTO/RechargeDTO.java
  12. 16
      src/main/java/com/example/demo/domain/DTO/RefundDTO.java
  13. 1
      src/main/java/com/example/demo/domain/vo/ConsumeUser.java
  14. 1
      src/main/java/com/example/demo/domain/vo/RechargeAudit.java
  15. 1
      src/main/java/com/example/demo/domain/vo/RechargeUser.java
  16. 2
      src/main/java/com/example/demo/service/AdminService.java
  17. 4
      src/main/java/com/example/demo/service/StatisticsService.java
  18. 6
      src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
  19. 1
      src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java
  20. 77
      src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java
  21. 3
      src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java
  22. 9
      src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java
  23. 11
      src/main/resources/application.yml
  24. 3
      src/main/resources/mapper/AuditMapper.xml
  25. 3
      src/main/resources/mapper/ConsumeMapper.xml

4
src/main/java/com/example/demo/Export/ExportServiceImpl.java

@ -57,6 +57,7 @@ public class ExportServiceImpl implements ExportService{
dto.setUrl(""); dto.setUrl("");
dto.setFileName(fileName); dto.setFileName(fileName);
dto.setDataNum(0); dto.setDataNum(0);
try{ try{
// 调用方式 // 调用方式
GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder(); GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder();
@ -81,6 +82,7 @@ public class ExportServiceImpl implements ExportService{
requestData.put("sort", dto.getSort()); requestData.put("sort", dto.getSort());
requestData.put("field", dto.getField()); requestData.put("field", dto.getField());
requestData.put("deptId", dto.getDeptid()); requestData.put("deptId", dto.getDeptid());
requestData.put("rechargeUser", dto.getRechargeUser());
exportData.put("requestData", requestData); exportData.put("requestData", requestData);
// 3. 发送到 Redis 消息队列 // 3. 发送到 Redis 消息队列
@ -137,6 +139,7 @@ public class ExportServiceImpl implements ExportService{
requestData.put("sort", dto.getSort()); requestData.put("sort", dto.getSort());
requestData.put("field", dto.getField()); requestData.put("field", dto.getField());
requestData.put("deptId", dto.getDeptid()); requestData.put("deptId", dto.getDeptid());
requestData.put("refundUser", dto.getRefundUser());
exportData.put("requestData", requestData); exportData.put("requestData", requestData);
// 3. 发送到 Redis 消息队列 // 3. 发送到 Redis 消息队列
@ -193,6 +196,7 @@ public class ExportServiceImpl implements ExportService{
requestData.put("sort", dto.getSort()); requestData.put("sort", dto.getSort());
requestData.put("field", dto.getField()); requestData.put("field", dto.getField());
requestData.put("deptId", dto.getDeptid()); requestData.put("deptId", dto.getDeptid());
requestData.put("consumeUser", dto.getConsumeUser());
exportData.put("requestData", requestData); exportData.put("requestData", requestData);
// 3. 发送到 Redis 消息队列 // 3. 发送到 Redis 消息队列

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 @Configuration
public class Mysql1DataSourceConfig { 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") @Bean(name = "mysql1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.mysql1") @ConfigurationProperties(prefix = "spring.datasource.mysql1")
public DataSource mysql2DataSource() { 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();
// }
//}

24
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()); WorkbenchCard result =workbenchService.getGraph(workbench.getToken(),workbench.getStartDate(),workbench.getEndDate(),workbench.getMarkets());
return ResponseEntity.ok(result); 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<WorkbenchCard> updateCard(@RequestBody WorkbenchCard workbench){
statisticsService.runHourlyTaskPart1(); //更新余量数据
statisticsService.runHourlyTaskPart2(); //更新余量外数据
WorkbenchCard result =workbenchService.getCard(workbench.getToken()); //获取卡片数据
return ResponseEntity.ok(result);
}
} }

14
src/main/java/com/example/demo/domain/DTO/ConsumeDTO.java

@ -34,11 +34,11 @@ public class ConsumeDTO {
private Integer pageSize = 20; private Integer pageSize = 20;
private ConsumeUser consumeUser; 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
// );
// }
} }

16
src/main/java/com/example/demo/domain/DTO/GoldDetailDTO.java

@ -1,5 +1,6 @@
package com.example.demo.domain.DTO; package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.GoldDetail;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -28,17 +29,18 @@ public class GoldDetailDTO {
private String text = ""; //关键词搜索 private String text = ""; //关键词搜索
private Integer dataNum = 0; private Integer dataNum = 0;
private String deptid = ""; private String deptid = "";
private GoldDetail goldDetail;
@NotNull(message = "page不能为空") @NotNull(message = "page不能为空")
private Integer page = 1; private Integer page = 1;
@NotNull(message = "pageSize不能为空") @NotNull(message = "pageSize不能为空")
private Integer pageSize = 20; 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
// );
// }
} }

16
src/main/java/com/example/demo/domain/DTO/GoldUserDTO.java

@ -1,5 +1,6 @@
package com.example.demo.domain.DTO; package com.example.demo.domain.DTO;
import com.example.demo.domain.entity.User;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -26,17 +27,18 @@ public class GoldUserDTO {
private String text = ""; //关键词搜索 private String text = ""; //关键词搜索
private Integer dataNum = 0; private Integer dataNum = 0;
private String deptid = ""; private String deptid = "";
private User user;
@NotNull(message = "page不能为空") @NotNull(message = "page不能为空")
private Integer page = 1; private Integer page = 1;
@NotNull(message = "pageSize不能为空") @NotNull(message = "pageSize不能为空")
private Integer pageSize = 20; 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
// );
// }
} }

16
src/main/java/com/example/demo/domain/DTO/RechargeDTO.java

@ -1,5 +1,6 @@
package com.example.demo.domain.DTO; package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.RechargeUser;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -27,17 +28,18 @@ public class RechargeDTO {
private String text = ""; //关键词搜索 private String text = ""; //关键词搜索
private Integer dataNum = 0; private Integer dataNum = 0;
private String deptid = ""; private String deptid = "";
private RechargeUser rechargeUser;
@NotNull(message = "page不能为空") @NotNull(message = "page不能为空")
private Integer page = 1; private Integer page = 1;
@NotNull(message = "pageSize不能为空") @NotNull(message = "pageSize不能为空")
private Integer pageSize = 20; 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
// );
// }
} }

16
src/main/java/com/example/demo/domain/DTO/RefundDTO.java

@ -1,5 +1,6 @@
package com.example.demo.domain.DTO; package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.RefundUser;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -26,17 +27,18 @@ public class RefundDTO {
private String text = ""; //关键词搜索 private String text = ""; //关键词搜索
private Integer dataNum = 0; private Integer dataNum = 0;
private String deptid = ""; private String deptid = "";
private RefundUser refundUser;
@NotNull(message = "page不能为空") @NotNull(message = "page不能为空")
private Integer page = 1; private Integer page = 1;
@NotNull(message = "pageSize不能为空") @NotNull(message = "pageSize不能为空")
private Integer pageSize = 20; 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
// );
// }
} }

1
src/main/java/com/example/demo/domain/vo/ConsumeUser.java

@ -37,6 +37,7 @@ public class ConsumeUser implements Serializable {
private String remark; // 备注 private String remark; // 备注
private Integer adminId; //提交人Id private Integer adminId; //提交人Id
private String adminName; //提交人姓名 private String adminName; //提交人姓名
private Integer isRefund; //是否退款
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; // 消费时间 private Date createTime; // 消费时间

1
src/main/java/com/example/demo/domain/vo/RechargeAudit.java

@ -35,6 +35,7 @@ public class RechargeAudit {
private Integer freeGold; // 免费金币 private Integer freeGold; // 免费金币
private Integer freeJune; // 6月免费金币 private Integer freeJune; // 6月免费金币
private Integer freeDecember; // 12月免费金币 private Integer freeDecember; // 12月免费金币
private Integer rateId; //汇率id
private String remark; // 备注 private String remark; // 备注
private String payModel; //支付方式 private String payModel; //支付方式
private String voucher; //支付凭证 private String voucher; //支付凭证

1
src/main/java/com/example/demo/domain/vo/RechargeUser.java

@ -18,7 +18,6 @@ import java.util.Date;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor
public class RechargeUser { public class RechargeUser {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

2
src/main/java/com/example/demo/service/AdminService.java

@ -12,4 +12,6 @@ import com.example.demo.domain.entity.Admin;
**/ **/
public interface AdminService { public interface AdminService {
Admin login(Admin admin)throws Exception; Admin login(Admin admin)throws Exception;
Integer selectId(String account);
} }

4
src/main/java/com/example/demo/service/StatisticsService.java

@ -15,9 +15,9 @@ import java.util.Date;
public interface StatisticsService { public interface StatisticsService {
//1点12点18点,23点30分执行定时任务更新当天part1数据
//每小时执行定时任务更新当天part1数据
public void runHourlyTaskPart1(); public void runHourlyTaskPart1();
//12点18点执行定时任务更新当天part2数据
//每小时执行定时任务更新当天part2数据
public void runHourlyTaskPart2(); public void runHourlyTaskPart2();
//0点执行定时任务更新近一周part2数据 //0点执行定时任务更新近一周part2数据
public void runDailyTaskPart2(); public void runDailyTaskPart2();

6
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) { private boolean hasPermissionToMachine(Admin admin, String targetMachineId) {
if (targetMachineId == null || admin.getMachineId() == null) { if (targetMachineId == null || admin.getMachineId() == null) {
return false; return false;

1
src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java

@ -78,6 +78,7 @@ public class AuditServiceImpl implements AuditService {
update.setCurrentFreeJune(order.getFreeJune()); //当前六月免费金币 update.setCurrentFreeJune(order.getFreeJune()); //当前六月免费金币
update.setCurrentFreeDecember(order.getFreeDecember()); //当前十二月免费金币 update.setCurrentFreeDecember(order.getFreeDecember()); //当前十二月免费金币
update.setCurrentTaskGold(order.getTaskGold()); //当前任务金币 update.setCurrentTaskGold(order.getTaskGold()); //当前任务金币
update.setRechargeNum(update.getRechargeNum()+1); //充值次数加一
auditMapper.updateUserGold(update); auditMapper.updateUserGold(update);
//erp增加充值数据 //erp增加充值数据
if(update.getJwcode().equals(94226013)){ if(update.getJwcode().equals(94226013)){

77
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 org.springframework.transaction.annotation.Transactional;
import java.io.*; import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import java.util.List;
@ -63,7 +66,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
@Override @Override
public Exception handleExcelExportData(String message) throws Exception { public Exception handleExcelExportData(String message) throws Exception {
System.out.println("明细导出excel数据开始执行:" + message); System.out.println("明细导出excel数据开始执行:" + message);
long startTime = System.currentTimeMillis();
long sTime = System.currentTimeMillis();
Long recordId = null; Long recordId = null;
String fileName = null; String fileName = null;
File tempFile = null; File tempFile = null;
@ -76,6 +79,9 @@ public class ExportExcelServiceImpl implements ExportExcelService {
// 2. 获取基本参数 // 2. 获取基本参数
recordId = rootNode.path("recordId").asLong(); recordId = rootNode.path("recordId").asLong();
JsonNode requestDataNode = rootNode.path("requestData"); JsonNode requestDataNode = rootNode.path("requestData");
JsonNode goldDetailNode = requestDataNode.path("goldDetail");
GoldDetail goldDetail = objectMapper.treeToValue(goldDetailNode, GoldDetail.class);
// 3. 验证导出记录 // 3. 验证导出记录
AiEmotionExportRecordVO record = validateExportRecord(recordId); AiEmotionExportRecordVO record = validateExportRecord(recordId);
if (record == null) return null; if (record == null) return null;
@ -86,11 +92,38 @@ public class ExportExcelServiceImpl implements ExportExcelService {
// 初始化临时文件保存到本地临时目录 // 初始化临时文件保存到本地临时目录
tempFile = File.createTempFile("export_", ".xlsx"); tempFile = File.createTempFile("export_", ".xlsx");
outputStream = new FileOutputStream(tempFile); // 使用文件输出流 outputStream = new FileOutputStream(tempFile); // 使用文件输出流
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 从JSON中提取单个值 // 从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 { try {
// 6. 初始化Excel写入器指向本地文件流 // 6. 初始化Excel写入器指向本地文件流
@ -101,6 +134,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
page.setPageNum(1); page.setPageNum(1);
page.setPageSize(1000); page.setPageSize(1000);
Integer totalCount = 0; Integer totalCount = 0;
page.setGoldDetail(goldDetail);
boolean hasMore = true; boolean hasMore = true;
while (hasMore) { while (hasMore) {
Result pageResult = goldDetailController.getGoldDetail(page); Result pageResult = goldDetailController.getGoldDetail(page);
@ -252,8 +286,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
throw new Exception("删除临时文件失败", e); throw new Exception("删除临时文件失败", e);
} }
} }
long endTime = System.currentTimeMillis();
log.info("导出任务完成,耗时: {}毫秒", (endTime - startTime));
long eTime = System.currentTimeMillis();
log.info("导出任务完成,耗时: {}毫秒", (eTime - sTime));
} }
return null; return null;
} }
@ -277,6 +311,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
// 2. 获取基本参数 // 2. 获取基本参数
recordId = rootNode.path("recordId").asLong(); recordId = rootNode.path("recordId").asLong();
JsonNode requestDataNode = rootNode.path("requestData"); JsonNode requestDataNode = rootNode.path("requestData");
JsonNode userNode = requestDataNode.path("user");
User user = objectMapper.treeToValue(userNode, User.class);
// 3. 验证导出记录 // 3. 验证导出记录
AiEmotionExportRecordVO record = validateExportRecord(recordId); AiEmotionExportRecordVO record = validateExportRecord(recordId);
if (record == null) return null; if (record == null) return null;
@ -288,10 +324,11 @@ public class ExportExcelServiceImpl implements ExportExcelService {
tempFile = File.createTempFile("export_", ".xlsx"); tempFile = File.createTempFile("export_", ".xlsx");
outputStream = new FileOutputStream(tempFile); // 使用文件输出流 outputStream = new FileOutputStream(tempFile); // 使用文件输出流
// 从JSON中提取单个值 // 从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 { try {
// 6. 初始化Excel写入器指向本地文件流 // 6. 初始化Excel写入器指向本地文件流
@ -301,6 +338,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
Page page = new Page(); Page page = new Page();
page.setPageNum(1); page.setPageNum(1);
page.setPageSize(1000); page.setPageSize(1000);
page.setUser(user);
Integer totalCount = 0; Integer totalCount = 0;
boolean hasMore = true; boolean hasMore = true;
while (hasMore) { while (hasMore) {
@ -476,6 +514,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
// 2. 获取基本参数 // 2. 获取基本参数
recordId = rootNode.path("recordId").asLong(); recordId = rootNode.path("recordId").asLong();
JsonNode requestDataNode = rootNode.path("requestData"); JsonNode requestDataNode = rootNode.path("requestData");
JsonNode rechargeNode = requestDataNode.path("rechargeUser");
RechargeUser rechargeUser = objectMapper.treeToValue(rechargeNode, RechargeUser.class);
// 3. 验证导出记录 // 3. 验证导出记录
AiEmotionExportRecordVO record = validateExportRecord(recordId); AiEmotionExportRecordVO record = validateExportRecord(recordId);
if (record == null) return null; if (record == null) return null;
@ -487,10 +527,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
tempFile = File.createTempFile("export_", ".xlsx"); tempFile = File.createTempFile("export_", ".xlsx");
outputStream = new FileOutputStream(tempFile); // 使用文件输出流 outputStream = new FileOutputStream(tempFile); // 使用文件输出流
// 从JSON中提取单个值 // 从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 { try {
// 6. 初始化Excel写入器指向本地文件流 // 6. 初始化Excel写入器指向本地文件流
@ -501,6 +541,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
page.setPageNum(1); page.setPageNum(1);
page.setPageSize(1000); page.setPageSize(1000);
Integer totalCount = 0; Integer totalCount = 0;
page.setRechargeUser(rechargeUser);
boolean hasMore = true; boolean hasMore = true;
while (hasMore) { while (hasMore) {
Result pageResult = rechargeController.selcetBy( page); Result pageResult = rechargeController.selcetBy( page);
@ -675,6 +716,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
// 2. 获取基本参数 // 2. 获取基本参数
recordId = rootNode.path("recordId").asLong(); recordId = rootNode.path("recordId").asLong();
JsonNode requestDataNode = rootNode.path("requestData"); JsonNode requestDataNode = rootNode.path("requestData");
JsonNode consumeUserNode = requestDataNode.path("consumeUser");
ConsumeUser consumeUser = objectMapper.treeToValue(consumeUserNode, ConsumeUser.class);
// 3. 验证导出记录 // 3. 验证导出记录
AiEmotionExportRecordVO record = validateExportRecord(recordId); AiEmotionExportRecordVO record = validateExportRecord(recordId);
if (record == null) return null; if (record == null) return null;
@ -699,6 +742,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
Page page = new Page(); Page page = new Page();
page.setPageNum(1); page.setPageNum(1);
page.setPageSize(1000); page.setPageSize(1000);
page.setConsumeUser(consumeUser);
Integer totalCount = 0; Integer totalCount = 0;
boolean hasMore = true; boolean hasMore = true;
while (hasMore) { while (hasMore) {
@ -874,6 +918,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
// 2. 获取基本参数 // 2. 获取基本参数
recordId = rootNode.path("recordId").asLong(); recordId = rootNode.path("recordId").asLong();
JsonNode requestDataNode = rootNode.path("requestData"); JsonNode requestDataNode = rootNode.path("requestData");
JsonNode refundUserNode = requestDataNode.path("refundUser");
RefundUser refundUser = objectMapper.treeToValue(refundUserNode, RefundUser.class);
// 3. 验证导出记录 // 3. 验证导出记录
AiEmotionExportRecordVO record = validateExportRecord(recordId); AiEmotionExportRecordVO record = validateExportRecord(recordId);
if (record == null) return null; if (record == null) return null;
@ -898,6 +944,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
Page page = new Page(); Page page = new Page();
page.setPageNum(1); page.setPageNum(1);
page.setPageSize(1000); page.setPageSize(1000);
page.setRefundUser(refundUser);
Integer totalCount = 0; Integer totalCount = 0;
boolean hasMore = true; boolean hasMore = true;
while (hasMore) { while (hasMore) {

3
src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java

@ -133,6 +133,7 @@ public class GoldDetailServiceImpl implements GoldDetailService {
dto.setUrl(""); dto.setUrl("");
dto.setFileName(fileName); dto.setFileName(fileName);
dto.setDataNum(0); dto.setDataNum(0);
try{ try{
// 调用方式 // 调用方式
GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder(); GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder();
@ -157,6 +158,7 @@ public class GoldDetailServiceImpl implements GoldDetailService {
requestData.put("sort", dto.getSort()); requestData.put("sort", dto.getSort());
requestData.put("field", dto.getField()); requestData.put("field", dto.getField());
requestData.put("deptId", dto.getDeptid()); requestData.put("deptId", dto.getDeptid());
requestData.put("goldDetail", dto.getGoldDetail());
exportData.put("requestData", requestData); exportData.put("requestData", requestData);
// 3. 发送到 Redis 消息队列 // 3. 发送到 Redis 消息队列
@ -213,6 +215,7 @@ public class GoldDetailServiceImpl implements GoldDetailService {
requestData.put("sort", dto.getSort()); requestData.put("sort", dto.getSort());
requestData.put("field", dto.getField()); requestData.put("field", dto.getField());
requestData.put("deptId", dto.getDeptid()); requestData.put("deptId", dto.getDeptid());
requestData.put("user", dto.getUser());
exportData.put("requestData", requestData); exportData.put("requestData", requestData);
// 3. 发送到 Redis 消息队列 // 3. 发送到 Redis 消息队列

9
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.Console;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@ -150,6 +151,14 @@ public class RefundServiceImpl implements RefundService {
List<ConsumeUser> list = consumeMapper.selectOrderCodeByJwcode(userGoldRecord.getJwcode().toString(), orderCode); List<ConsumeUser> list = consumeMapper.selectOrderCodeByJwcode(userGoldRecord.getJwcode().toString(), orderCode);
if (list == null || list.isEmpty()) { if (list == null || list.isEmpty()) {
return Result.error("该用户没有该订单号"); 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); refundMapper.add(userGoldRecord);
consumeMapper.updateIsRefund(orderCode); consumeMapper.updateIsRefund(orderCode);

11
src/main/resources/application.yml

@ -43,6 +43,14 @@ spring:
# hikari: # hikari:
# pool-name: mysql2HikariCP # pool-name: mysql2HikariCP
# maximum-pool-size: 10 # 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: application:
name: demo name: demo
@ -77,6 +85,9 @@ mybatis:
mysql1: mysql1:
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# sqlserver1:
# map-underscore-to-camel-case: true
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# mysql2: # mysql2:
# map-underscore-to-camel-case: true # map-underscore-to-camel-case: true
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3
src/main/resources/mapper/AuditMapper.xml

@ -61,6 +61,9 @@
<if test="rechargeAudit.payModel != null and rechargeAudit.payModel != ''"> <if test="rechargeAudit.payModel != null and rechargeAudit.payModel != ''">
AND ugr.pay_model = #{rechargeAudit.payModel} AND ugr.pay_model = #{rechargeAudit.payModel}
</if> </if>
<if test="rechargeAudit.rateId != null and rechargeAudit.rateId != ''">
AND ugr.rate_id = #{rechargeAudit.rateId}
</if>
<if test="rechargeAudit.market != null and rechargeAudit.market != ''"> <if test="rechargeAudit.market != null and rechargeAudit.market != ''">
AND u.market = #{rechargeAudit.market} AND u.market = #{rechargeAudit.market}
</if> </if>

3
src/main/resources/mapper/ConsumeMapper.xml

@ -134,7 +134,8 @@
<select id="selectOrderCodeByJwcode" resultType="com.example.demo.domain.vo.ConsumeUser"> <select id="selectOrderCodeByJwcode" resultType="com.example.demo.domain.vo.ConsumeUser">
SELECT SELECT
ugr.jwcode AS jwcode, ugr.jwcode AS jwcode,
ugr.order_code AS orderCode
ugr.order_code AS orderCode,
ugr.is_refund AS isRefund
FROM user_gold_record ugr FROM user_gold_record ugr
where where
ugr.order_code = #{orderCode} ugr.order_code = #{orderCode}

Loading…
Cancel
Save