实现根据条件筛选返回TradeLog数据接口 #20
Merged
hnu202326010219
merged 1 commits from mayinghe_branch into develop 4 months ago
@ -0,0 +1,20 @@
|
||||
package com.datadashboard.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* TradeLog查询条件DTO
|
||||
*/
|
||||
@Data
|
||||
public class TradeLogQueryDto {
|
||||
|
||||
private Integer page = 1; // 当前页
|
||||
private Integer pageSize = 20; // 每页条数
|
||||
|
||||
private Long userId; // 精确查询玩家ID
|
||||
private String name; // 模糊查询昵称
|
||||
private Integer logType; // 筛选记录类型 (5 或 6)
|
||||
private Integer tradeType; // 筛选交易具体场景
|
||||
private String startDate; // 开始日期 (yyyy-MM-dd HH:mm:ss)
|
||||
private String endDate; // 结束日期 (yyyy-MM-dd HH:mm:ss)
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
package com.datadashboard.repository;
|
||||
|
||||
import com.datadashboard.common.PageResult;
|
||||
import com.datadashboard.dto.TradeLogQueryDto;
|
||||
import com.datadashboard.entity.TradeLog;
|
||||
|
||||
/**
|
||||
* TradeLog数据访问接口
|
||||
*/
|
||||
public interface TradeLogRepository {
|
||||
|
||||
/**
|
||||
* 根据条件分页查询TradeLog
|
||||
*
|
||||
* @param queryDto 查询条件
|
||||
* @return 分页结果
|
||||
*/
|
||||
PageResult<TradeLog> findTradeLogsByCondition(TradeLogQueryDto queryDto);
|
||||
}
|
||||
@ -0,0 +1,124 @@
|
||||
package com.datadashboard.repository.impl;
|
||||
|
||||
import com.datadashboard.common.PageResult;
|
||||
import com.datadashboard.dto.TradeLogQueryDto;
|
||||
import com.datadashboard.entity.TradeLog;
|
||||
import com.datadashboard.repository.TradeLogRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* TradeLog数据访问实现类
|
||||
*/
|
||||
@Slf4j
|
||||
@Repository
|
||||
public class TradeLogRepositoryImpl implements TradeLogRepository {
|
||||
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
|
||||
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
@Override
|
||||
public PageResult<TradeLog> findTradeLogsByCondition(TradeLogQueryDto queryDto) {
|
||||
try {
|
||||
Query query = buildQuery(queryDto);
|
||||
|
||||
// 计算总数
|
||||
long total = mongoTemplate.count(query, TradeLog.class);
|
||||
|
||||
// 分页查询
|
||||
int skip = (queryDto.getPage() - 1) * queryDto.getPageSize();
|
||||
query.skip(skip).limit(queryDto.getPageSize());
|
||||
|
||||
// 按时间倒序排列
|
||||
query.with(Sort.by(Sort.Direction.DESC, "time"));
|
||||
|
||||
List<TradeLog> list = mongoTemplate.find(query, TradeLog.class);
|
||||
|
||||
return new PageResult<>(total, queryDto.getPage(), queryDto.getPageSize(), list);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("查询TradeLog失败", e);
|
||||
throw new RuntimeException("数据库查询异常", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建查询条件
|
||||
*/
|
||||
private Query buildQuery(TradeLogQueryDto queryDto) {
|
||||
Query query = new Query();
|
||||
|
||||
// 精确查询玩家ID
|
||||
if (queryDto.getUserId() != null) {
|
||||
query.addCriteria(Criteria.where("userId").is(queryDto.getUserId()));
|
||||
}
|
||||
|
||||
// 模糊查询昵称
|
||||
if (StringUtils.hasText(queryDto.getName())) {
|
||||
Pattern pattern = Pattern.compile(queryDto.getName(), Pattern.CASE_INSENSITIVE);
|
||||
query.addCriteria(Criteria.where("name").regex(pattern));
|
||||
}
|
||||
|
||||
// 筛选记录类型
|
||||
if (queryDto.getLogType() != null) {
|
||||
query.addCriteria(Criteria.where("logType").is(queryDto.getLogType()));
|
||||
}
|
||||
|
||||
// 筛选交易具体场景
|
||||
if (queryDto.getTradeType() != null) {
|
||||
query.addCriteria(Criteria.where("tradeType").is(queryDto.getTradeType()));
|
||||
}
|
||||
|
||||
// 时间范围查询
|
||||
addDateRangeCriteria(query, queryDto);
|
||||
|
||||
return query;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加时间范围查询条件
|
||||
*/
|
||||
private void addDateRangeCriteria(Query query, TradeLogQueryDto queryDto) {
|
||||
try {
|
||||
Criteria timeCriteria = null;
|
||||
|
||||
if (StringUtils.hasText(queryDto.getStartDate())) {
|
||||
Date startDate = DATE_FORMAT.parse(queryDto.getStartDate());
|
||||
long startTime = startDate.getTime();
|
||||
timeCriteria = Criteria.where("time").gte(startTime);
|
||||
}
|
||||
|
||||
if (StringUtils.hasText(queryDto.getEndDate())) {
|
||||
Date endDate = DATE_FORMAT.parse(queryDto.getEndDate());
|
||||
long endTime = endDate.getTime();
|
||||
if (timeCriteria != null) {
|
||||
timeCriteria = timeCriteria.lte(endTime);
|
||||
} else {
|
||||
timeCriteria = Criteria.where("time").lte(endTime);
|
||||
}
|
||||
}
|
||||
|
||||
if (timeCriteria != null) {
|
||||
query.addCriteria(timeCriteria);
|
||||
}
|
||||
|
||||
} catch (ParseException e) {
|
||||
log.error("日期格式解析错误", e);
|
||||
throw new RuntimeException("日期格式错误,请使用 yyyy-MM-dd HH:mm:ss 格式", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package com.datadashboard.service;
|
||||
|
||||
import com.datadashboard.common.PageResult;
|
||||
import com.datadashboard.common.Result;
|
||||
import com.datadashboard.dto.TradeLogQueryDto;
|
||||
import com.datadashboard.entity.TradeLog;
|
||||
|
||||
/**
|
||||
* TradeLog业务逻辑接口
|
||||
*/
|
||||
public interface TradeLogService {
|
||||
|
||||
/**
|
||||
* 根据条件分页查询TradeLog
|
||||
*
|
||||
* @param queryDto 查询条件
|
||||
* @return 分页结果
|
||||
*/
|
||||
Result<PageResult<TradeLog>> getTradeLogsByCondition(TradeLogQueryDto queryDto);
|
||||
}
|
||||
Loading…
Reference in new issue