fix:1.解决运行日志分页查询bug

This commit is contained in:
panbaolin 2026-06-02 16:11:10 +08:00
parent 87e51675a3
commit bbad39f6c5
11 changed files with 131 additions and 176 deletions

View File

@ -14,10 +14,7 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 同步记录表
* @Author: jeecg-boot
* @Date: 2025-10-14
* @Version: V1.0
* 同步记录表
*/
@Data
@TableName("stas_sync_record")

View File

@ -4,10 +4,7 @@ import org.jeecg.modules.base.entity.StasSyncLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 同步日志信息
* @Author: jeecg-boot
* @Date: 2025-10-14
* @Version: V1.0
* 同步日志信息
*/
public interface StasSyncLogMapper extends BaseMapper<StasSyncLog> {

View File

@ -1,20 +1,29 @@
package org.jeecg.modules.base.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.base.entity.StasSyncRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.base.vo.TaskStatsVO;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* @Description: 同步记录表
* @Author: jeecg-boot
* @Date: 2025-10-14
* @Version: V1.0
* 同步记录表
*/
public interface StasSyncRecordMapper extends BaseMapper<StasSyncRecord> {
List<TaskStatsVO> taskHistoryStats();
List<TaskStatsVO> taskStatsDay(String startTime);
List<TaskStatsVO> taskStatsMonth(String startTime);
/**
* 分页查询同步记录
* @param sourceId
* @param startTime
* @param endTime
* @return
*/
IPage<Map<String,Object>> queryPageList(@Param("page") Page<StasSyncRecord> page, @Param("sourceId") String sourceId, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
}

View File

@ -52,4 +52,28 @@
ORDER BY TO_CHAR(r.start_time, 'YYYY-MM') DESC, ta.task_name
</select>
<select id="queryPageList" resultType="java.util.Map">
select
r.id,
t.task_name as "taskName",
src.instance_name as "sourceName",
target.instance_name as "targetName",
r.start_time as "startTime",
r.end_time as "endTime"
from stas_sync_record r
inner join stas_task_config t on t.id = r.task_id
inner join stas_data_source src on src.id = r.source_id
inner join stas_data_source target on target.id = r.target_id
<where>
<if test="sourceId != null and sourceId !=''">
r.source_id = #{sourceId}
</if>
<if test="startTime != null and endTime != null">
and r.start_time &gt;= #{startTime}
and r.end_time &lt;= #{endTime}
</if>
</where>
order by r.start_time desc
</select>
</mapper>

View File

@ -1,56 +1,39 @@
package org.jeecg.syncLog.controller;
import jakarta.servlet.http.HttpServletRequest;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.base.entity.StasSyncLog;
import org.jeecg.syncLog.service.IStasSyncLogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Description: 同步日志信息
* @Author: jeecg-boot
* @Date: 2025-10-14
* @Version: V1.0
/**
* 同步日志信息
*/
@Tag(name="同步日志信息")
@RestController
@RequestMapping("/stasSyncLog")
@Slf4j
public class StasSyncLogController extends JeecgController<StasSyncLog, IStasSyncLogService> {
public class StasSyncLogController{
@Autowired
private IStasSyncLogService stasSyncLogService;
/**
* 分页列表查询
*
* @param stasSyncLog
* @param recordId
* @param pageNum
* @param pageSize
* @param req
* @return
*/
@Operation(summary = "同步日志信息-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<StasSyncLog>> queryPageList(StasSyncLog stasSyncLog,
@RequestParam(name="pageNum", defaultValue="1") Integer pageNum,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<StasSyncLog> queryWrapper = QueryGenerator.initQueryWrapper(stasSyncLog, req.getParameterMap());
queryWrapper.orderByAsc("start_time");
Page<StasSyncLog> page = new Page<StasSyncLog>(pageNum, pageSize);
IPage<StasSyncLog> pageList = stasSyncLogService.page(page, queryWrapper);
public Result<IPage<StasSyncLog>> queryPageList(String recordId, Integer pageNum, Integer pageSize) {
IPage<StasSyncLog> pageList = stasSyncLogService.queryPageList(recordId, pageNum,pageSize);
return Result.OK(pageList);
}

View File

@ -1,14 +1,22 @@
package org.jeecg.syncLog.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.base.entity.StasSyncLog;
import com.baomidou.mybatisplus.extension.service.IService;
import java.time.LocalDateTime;
/**
* @Description: 同步日志信息
* @Author: jeecg-boot
* @Date: 2025-10-14
* @Version: V1.0
* 同步日志信息
*/
public interface IStasSyncLogService extends IService<StasSyncLog> {
/**
* 分页查询同步日志
* @param recordId
* @param pageNum
* @param pageSize
* @return
*/
IPage<StasSyncLog> queryPageList(String recordId, Integer pageNum, Integer pageSize);
}

View File

@ -1,21 +1,35 @@
package org.jeecg.syncLog.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.base.entity.StasSyncLog;
import org.jeecg.modules.base.mapper.StasSyncLogMapper;
import org.jeecg.syncLog.service.IStasSyncLogService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 同步日志信息
* @Author: jeecg-boot
* @Date: 2025-10-14
* @Version: V1.0
* 同步日志信息
*/
@Service
public class StasSyncLogServiceImpl extends ServiceImpl<StasSyncLogMapper, StasSyncLog> implements IStasSyncLogService {
/**
* 分页查询同步日志
*
* @param recordId
* @param pageNum
* @param pageSize
* @return
*/
@Override
public IPage<StasSyncLog> queryPageList(String recordId, Integer pageNum, Integer pageSize) {
LambdaQueryWrapper<StasSyncLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StasSyncLog::getRecordId, recordId);
queryWrapper.orderByAsc(StasSyncLog::getStartTime);
IPage<StasSyncLog> page = new Page<>(pageNum, pageSize);
return this.baseMapper.selectPage(page, queryWrapper);
}
}

View File

@ -1,116 +1,50 @@
package org.jeecg.syncRecord.controller;
import jakarta.servlet.http.HttpServletRequest;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.dataSource.service.IStasDataSourceService;
import org.jeecg.modules.base.entity.StasDataSource;
import org.jeecg.modules.base.entity.StasSyncRecord;
import org.jeecg.modules.base.entity.StasTaskConfig;
import org.jeecg.syncRecord.service.IStasSyncRecordService;
import org.jeecg.syncRecord.vo.SyncRecordVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.taskConfig.service.IStasTaskConfigService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description: 同步记录表
* @Author: jeecg-boot
* @Date: 2025-10-14
* @Version: V1.0
* 同步记录表
*/
@Tag(name="同步记录表")
@RestController
@RequestMapping("/stasSyncRecord")
@Slf4j
public class StasSyncRecordController extends JeecgController<StasSyncRecord, IStasSyncRecordService> {
@Autowired
private IStasSyncRecordService stasSyncRecordService;
@Autowired
private IStasDataSourceService stasDataSourceService;
@Autowired
private IStasTaskConfigService stasTaskConfigService;
/**
* 分页列表查询
*
* @param stasSyncRecord
* @param pageNo
* @param sourceId
* @param pageNum
* @param pageSize
* @param req
* @param startTime
* @param endTime
* @return
*/
//@AutoLog(value = "同步记录表-分页列表查询")
@Operation(summary = "同步记录表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<SyncRecordVO>> queryPageList(StasSyncRecord stasSyncRecord,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
stasSyncRecord.setStartTime(null);
stasSyncRecord.setEndTime(null);
QueryWrapper<StasSyncRecord> queryWrapper = QueryGenerator.initQueryWrapper(stasSyncRecord, req.getParameterMap());
// 处理开始时间区间查询
String beginStartTime = req.getParameter("startTime");
String endStartTime = req.getParameter("endTime");
if (StringUtils.isNotBlank(beginStartTime)) {
queryWrapper.ge("start_time", beginStartTime);
}
if (StringUtils.isNotBlank(endStartTime)) {
queryWrapper.le("start_time", endStartTime);
}
queryWrapper.orderByAsc("start_time");
Page<StasSyncRecord> page = new Page<>(pageNo, pageSize);
IPage<StasSyncRecord> pageList = stasSyncRecordService.page(page, queryWrapper);
List<StasSyncRecord> records = pageList.getRecords();
// 准备数据源和任务名称映射
Map<String, String> dataSourceMap = stasDataSourceService.list().stream()
.collect(Collectors.toMap(StasDataSource::getId, StasDataSource::getInstanceName));
Map<String, String> taskMap = stasTaskConfigService.list().stream()
.collect(Collectors.toMap(StasTaskConfig::getId, StasTaskConfig::getTaskName));
// 转换为VO列表
List<SyncRecordVO> syncRecordVOS = records.stream().map(record -> {
SyncRecordVO vo = new SyncRecordVO();
vo.setId(record.getId());
vo.setTaskName(taskMap.get(record.getTaskId()));
vo.setSourceName(dataSourceMap.get(record.getSourceId()));
vo.setTargetName(dataSourceMap.get(record.getTargetId()));
vo.setStartTime(record.getStartTime());
vo.setEndTime(record.getEndTime());
return vo;
}).collect(Collectors.toList());
// 创建新的分页对象
Page<SyncRecordVO> resultPage = new Page<>();
BeanUtils.copyProperties(pageList, resultPage, "records");
resultPage.setRecords(syncRecordVOS);
return Result.OK(resultPage);
public Result<?> queryPageList(String sourceId, Integer pageNum, Integer pageSize,
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) {
IPage<Map<String,Object>> page = stasSyncRecordService.queryPageList(sourceId,pageNum,pageSize,startTime,endTime);
return Result.OK(page);
}
/**
* 历史同步数量统计
* @return

View File

@ -1,11 +1,14 @@
package org.jeecg.syncRecord.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.base.entity.StasSyncRecord;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.syncRecord.vo.TaskHisStatsVO;
import org.jeecg.syncRecord.vo.TaskStatsResultVO;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* @Description: 同步记录表
@ -19,4 +22,14 @@ public interface IStasSyncRecordService extends IService<StasSyncRecord> {
TaskStatsResultVO taskStatsDay();
TaskStatsResultVO taskStatsMonth();
/**
* 分页查询同步日志
* @param sourceId
* @param pageNum
* @param pageSize
* @param startTime
* @param endTime
* @return
*/
IPage<Map<String,Object>> queryPageList(String sourceId, Integer pageNum, Integer pageSize, LocalDateTime startTime, LocalDateTime endTime);
}

View File

@ -1,7 +1,8 @@
package org.jeecg.syncRecord.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.base.entity.StasSyncRecord;
import org.jeecg.modules.base.mapper.StasSyncRecordMapper;
import org.jeecg.modules.base.vo.TaskStatsVO;
@ -9,19 +10,15 @@ import org.jeecg.syncRecord.service.IStasSyncRecordService;
import org.jeecg.syncRecord.vo.TaskHisStatsVO;
import org.jeecg.syncRecord.vo.TaskStatsResultVO;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description: 同步记录表
* @Author: jeecg-boot
* @Date: 2025-10-14
* @Version: V1.0
* 同步记录表
*/
@Service
@RequiredArgsConstructor
@ -97,6 +94,27 @@ public class StasSyncRecordServiceImpl extends ServiceImpl<StasSyncRecordMapper,
return taskStatsResultVO;
}
/**
* 分页查询同步日志
*
* @param sourceId
* @param pageNum
* @param pageSize
* @param startTime
* @param endTime
* @return
*/
@Override
public IPage<Map<String,Object>> queryPageList(String sourceId, Integer pageNum, Integer pageSize, LocalDateTime startTime, LocalDateTime endTime) {
if(Objects.nonNull(startTime)){
startTime = startTime.withHour(0).withMinute(0).withSecond(0);
}
if(Objects.nonNull(endTime)){
endTime = endTime.withHour(23).withMinute(59).withSecond(59);
}
Page<StasSyncRecord> page = new Page<>(pageNum, pageSize);
return this.baseMapper.queryPageList(page,sourceId,startTime,endTime);
}
public static List<String> getLastMonthDates() {
List<String> dateList = new ArrayList<>();

View File

@ -1,42 +0,0 @@
package org.jeecg.syncRecord.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @Description: 同步记录表
* @Author: jeecg-boot
* @Date: 2025-10-14
* @Version: V1.0
*/
@Data
public class SyncRecordVO implements Serializable {
private static final long serialVersionUID = 1L;
/**任务名称*/
private String id;
/**任务名称*/
private String taskName;
/**源库名称*/
private String sourceName;
/**目标库名称*/
private String targetName;
/**开始时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date startTime;
/**结束时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date endTime;
}