Browse Source

8.3完成金豆导出

huangqizheng/feature-20250803175216-导出完毕
huangqizhen 2 weeks ago
parent
commit
5d63edd819
  1. 4
      src/main/java/com/example/demo/Export/ExportService.java
  2. 44
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  3. 2
      src/main/java/com/example/demo/config/Mysql4DataSourceConfig.java
  4. 34
      src/main/java/com/example/demo/controller/coin/ExportController.java
  5. 2
      src/main/java/com/example/demo/domain/DTO/ArticleDTO.java
  6. 37
      src/main/java/com/example/demo/domain/DTO/BeanRechargeDTO.java
  7. 36
      src/main/java/com/example/demo/domain/DTO/OnlineDTO.java
  8. 6
      src/main/java/com/example/demo/domain/vo/bean/BeanRechargeInfo.java
  9. 4
      src/main/java/com/example/demo/service/coin/ExportExcelService.java
  10. 35
      src/main/java/com/example/demo/service/listen/BeanListener.java
  11. 34
      src/main/java/com/example/demo/service/listen/OnLineListener.java
  12. 32
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

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

@ -24,4 +24,8 @@ public interface ExportService {
Result addExportFan(FanDTO dto);
//金豆文章导出
Result addExportArticle(ArticleDTO dto);
Result addExportBean(BeanRechargeDTO dto);
Result addExportOnline(OnlineDTO dto);
}

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

@ -109,6 +109,16 @@ public class ExportServiceImpl implements ExportService {
fanDTO.setUrl("");
fanDTO.setFileName(generateFileName("铁粉明细", adminName));
fanDTO.setDataNum(0);
} else if (dto instanceof BeanRechargeDTO beanRechargeDTO){
beanRechargeDTO.setAccount(Integer.valueOf(account));
beanRechargeDTO.setUrl("");
beanRechargeDTO.setFileName(generateFileName("金豆充值明细", adminName));
beanRechargeDTO.setDataNum(0);
} else if(dto instanceof OnlineDTO onlineDTO){
onlineDTO.setAccount(Integer.valueOf(account));
onlineDTO.setUrl("");
onlineDTO.setFileName(generateFileName("在线明细", adminName));
onlineDTO.setDataNum(0);
}
}
@ -176,6 +186,26 @@ public class ExportServiceImpl implements ExportService {
articleDTO.getFileName(),
articleDTO.getDataNum()
);
} else if (dto instanceof BeanRechargeDTO beanRechargeDTO){
goldDetailMapper.insertExportRecord(
idHolder,
account,
beanRechargeDTO.getType(),
beanRechargeDTO.getState(),
beanRechargeDTO.getUrl(),
beanRechargeDTO.getFileName(),
beanRechargeDTO.getDataNum()
);
} else if (dto instanceof OnlineDTO onlineDTO){
goldDetailMapper.insertExportRecord(
idHolder,
account,
onlineDTO.getType(),
onlineDTO.getState(),
onlineDTO.getUrl(),
onlineDTO.getFileName(),
onlineDTO.getDataNum()
);
}
}
@ -200,6 +230,10 @@ public class ExportServiceImpl implements ExportService {
requestData.put(requestDataKey, fanDTO.getBeanConsumeFan());
} else if (dto instanceof ArticleDTO articleDTO) {
requestData.put(requestDataKey, articleDTO.getBeanConsumeArticle());
} else if (dto instanceof BeanRechargeDTO beanRechargeDTO){
requestData.put(requestDataKey, beanRechargeDTO.getBeanRechargeInfo());
} else if (dto instanceof OnlineDTO onlineDTO){
requestData.put(requestDataKey, onlineDTO.getBeanRechargeInfo());
}
exportData.put("requestData", requestData);
@ -245,4 +279,14 @@ public class ExportServiceImpl implements ExportService {
public Result addExportArticle(ArticleDTO dto) {
return addExport(dto, "文章明细", "article:queue:export_queue", "beanConsumeArticle");
}
@Override
public Result addExportBean(BeanRechargeDTO dto) {
return addExport(dto, "金豆明细", "bean:queue:export_queue", "beanRechargeInfo");
}
@Override
public Result addExportOnline(OnlineDTO dto) {
return addExport(dto, "在线明细", "online:queue:export_queue", "beanRechargeInfo");
}
}

2
src/main/java/com/example/demo/config/Mysql4DataSourceConfig.java

@ -36,7 +36,7 @@ public class Mysql4DataSourceConfig {
@Qualifier("globalConfiguration4") org.apache.ibatis.session.Configuration globalConfiguration4) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:payMapper/*.xml"));
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:paymapper/*.xml"));
sessionFactory.setConfiguration(globalConfiguration4);
return sessionFactory.getObject();
}

34
src/main/java/com/example/demo/controller/coin/ExportController.java

@ -149,4 +149,38 @@ public class ExportController {
redisLockUtil.unlock(lockKey, requestId);
}
}
@PostMapping("/exportBean")
public Result export(@Valid @RequestBody BeanRechargeDTO dto){
String lockKey = "export:lock:" + dto.getToken();
String requestId = UUID.randomUUID().toString();
long expireTime = 5000;
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
throw new BusinessException("操作太频繁,请稍后重试");
}
// 执行业务逻辑
return exportService.addExportBean(dto);
} finally {
// 释放锁
redisLockUtil.unlock(lockKey, requestId);
}
}
@PostMapping("/exportol")
public Result exportol(@Valid @RequestBody OnlineDTO dto) throws Exception {
String lockKey = "export:lock:" + dto.getToken();
String requestId = UUID.randomUUID().toString();
long expireTime = 5000;
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
throw new BusinessException("操作太频繁,请稍后重试");
}
// 执行业务逻辑
return exportService.addExportOnline(dto);
} finally {
// 释放锁
redisLockUtil.unlock(lockKey, requestId);
}
}
}

2
src/main/java/com/example/demo/domain/DTO/ArticleDTO.java

@ -23,7 +23,7 @@ public class ArticleDTO {
private Integer sort = 0;
private String field = "";
private Integer account;
private Integer type = 7; //类型
private Integer type = 8; //类型
private Integer state = 0; //状态
private String text = ""; //关键词搜索
private Integer dataNum = 0;

37
src/main/java/com/example/demo/domain/DTO/BeanRechargeDTO.java

@ -0,0 +1,37 @@
package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.bean.BeanConsumeArticle;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: GOLD
* @ClassName BeanRechargeDTO
* @description:
* @author: huangqizhen
* @create: 202508-03 09:26
* @Version 1.0
**/
@Data
@NoArgsConstructor
public class BeanRechargeDTO {
private String token;
private String url = "";
private String fileName = "";
private Integer sort = 0;
private String field = "";
private Integer account;
private Integer type = 9; //类型
private Integer state = 0; //状态
private String text = ""; //关键词搜索
private Integer dataNum = 0;
private String deptid = "";
@NotNull(message = "page不能为空")
private Integer page = 1;
@NotNull(message = "pageSize不能为空")
private Integer pageSize = 20;
private BeanRechargeInfo beanRechargeInfo;
}

36
src/main/java/com/example/demo/domain/DTO/OnlineDTO.java

@ -0,0 +1,36 @@
package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: GOLD
* @ClassName OnlineDTO
* @description:
* @author: huangqizhen
* @create: 202508-03 11:51
* @Version 1.0
**/
@Data
@NoArgsConstructor
public class OnlineDTO {
private String token;
private String url = "";
private String fileName = "";
private Integer sort = 0;
private String field = "";
private Integer account;
private Integer type = 10; //类型
private Integer state = 0; //状态
private String text = ""; //关键词搜索
private Integer dataNum = 0;
private String deptid = "";
@NotNull(message = "page不能为空")
private Integer page = 1;
@NotNull(message = "pageSize不能为空")
private Integer pageSize = 20;
private BeanRechargeInfo beanRechargeInfo;
}

6
src/main/java/com/example/demo/domain/vo/bean/BeanRechargeInfo.java

@ -1,5 +1,6 @@
package com.example.demo.domain.vo.bean;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
@ -48,11 +49,16 @@ public class BeanRechargeInfo {
@ExcelProperty("充值时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date rechargeTime; // 充值时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date startTime; // 开始时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date endTime; // 结束时间
@ExcelIgnore
private List<String> markets; // 地区列表
@ExcelIgnore
private String sortField; //排序字段
@ExcelIgnore
private String sortOrder; //排序顺序
}

4
src/main/java/com/example/demo/service/coin/ExportExcelService.java

@ -27,7 +27,11 @@ public interface ExportExcelService {
Exception FanExcel(String message) throws Exception;
Exception ArticleExcel(String message) throws Exception;
List<Export> getExcel(Export export);
Exception BeanExcel(String message) throws Exception;
@Transactional
Exception exportExcelGeneric(String message, String exportType, Function<Page, Result> dataFetcher) throws Exception;
Exception OnlineExcel(String message) throws Exception;
}

35
src/main/java/com/example/demo/service/listen/BeanListener.java

@ -0,0 +1,35 @@
package com.example.demo.service.listen;
import com.example.demo.Export.ExportService;
import com.example.demo.Util.RedisUtil;
import com.example.demo.service.coin.ExportExcelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @program: GOLD
* @ClassName BeanListener
* @description:
* @author: huangqizhen
* @create: 202508-03 11:14
* @Version 1.0
**/
@Component
public class BeanListener extends BaseMessageListener<String>{
@Autowired
private ExportExcelService exportExcelService;
protected BeanListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil,"bean:queue:export_queue");
}
@Override
protected void handleMessage(String message) {
validateMessage( message);
try {
Thread.sleep(5000);
exportExcelService.BeanExcel(message);
} catch (Exception e) {
handleException(e, message);
}
}
}

34
src/main/java/com/example/demo/service/listen/OnLineListener.java

@ -0,0 +1,34 @@
package com.example.demo.service.listen;
import com.example.demo.Util.RedisUtil;
import com.example.demo.service.coin.ExportExcelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @program: GOLD
* @ClassName OnLineListener
* @description:
* @author: huangqizhen
* @create: 202508-03 11:58
* @Version 1.0
**/
@Component
public class OnLineListener extends BaseMessageListener<String> {
@Autowired
public ExportExcelService exportExcelService;
protected OnLineListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil, "online:queue:export_queue");
}
@Override
protected void handleMessage(String message) {
validateMessage( message);
try {
Thread.sleep(5000);
exportExcelService.OnlineExcel(message);
} catch (Exception e) {
handleException(e, message);
}
}
}

32
src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

@ -7,6 +7,7 @@ import com.alibaba.excel.write.metadata.WriteSheet;
import com.example.demo.Util.ExcelUploadUtil;
import com.example.demo.Util.JWTUtil;
import com.example.demo.controller.bean.BeanConsumeController;
import com.example.demo.controller.bean.BeanRechargeController;
import com.example.demo.controller.coin.ConsumeController;
import com.example.demo.controller.coin.GoldDetailController;
import com.example.demo.controller.coin.RechargeController;
@ -19,6 +20,7 @@ import com.example.demo.domain.vo.bean.BeanConsumeArticle;
import com.example.demo.domain.vo.bean.BeanConsumeFan;
import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.coin.*;
import com.example.demo.mapper.coin.ExportMapper;
@ -73,6 +75,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
@Autowired
private BeanConsumeController beanConsumeController;
@Autowired
private BeanRechargeController beanRechargeController;
@Autowired
private AuthenticationManager authenticationManager;
// 每页查询的数据量
private static final int PAGE_SIZE = 1000;
@ -172,6 +176,26 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
});
}
@Override
public Exception BeanExcel(String message) throws Exception {
return exportExcelGeneric(message, "beanUser", page -> {
try {
return beanRechargeController.selectBySystem(page);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@Override
public Exception OnlineExcel(String message) throws Exception {
return exportExcelGeneric(message, "onlineUser", page -> {
try {
return beanRechargeController.selectByOnline(page);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@Override
public List<Export> getExcel(Export export) {
@ -360,6 +384,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
return null;
}
private Class<?> getExportClass(String exportType) {
switch (exportType) {
case "goldDetail":
@ -378,6 +406,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
return BeanConsumeFan.class;
case "articleUser":
return BeanConsumeArticle.class;
case "beanUser":
return BeanRechargeInfo.class;
case "onlineUser":
return BeanRechargeInfo.class;
default:
throw new IllegalArgumentException("不支持的导出类型: " + exportType);
}

Loading…
Cancel
Save