同步统计

This commit is contained in:
hekaiyu 2025-12-10 14:24:49 +08:00
parent ef75e3988a
commit 04e3a8b9cf
10 changed files with 250 additions and 5 deletions

View File

@ -2,6 +2,10 @@ package org.jeecg.modules.base.mapper;
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.util.List;
/**
* @Description: 同步记录表
@ -10,5 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @Version: V1.0
*/
public interface StasSyncRecordMapper extends BaseMapper<StasSyncRecord> {
List<TaskStatsVO> taskHistoryStats();
List<TaskStatsVO> taskStatsDay(String startTime);
List<TaskStatsVO> taskStatsMonth(String startTime);
}

View File

@ -2,4 +2,54 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.base.mapper.StasSyncRecordMapper">
<select id="taskHistoryStats" resultType="org.jeecg.modules.base.vo.TaskStatsVO">
SELECT
ta.id id,
ta.task_name taskName,
r.start_time dateTime,
n.sync_num syncNum
FROM
stas_task_config ta
JOIN stas_sync_record r ON ta.id = r.task_id
JOIN stas_sync_num n ON r.id = n.record_id
</select>
<select id="taskStatsDay" parameterType="java.lang.String" resultType="org.jeecg.modules.base.vo.TaskStatsVO">
SELECT
ta.id as id,
ta.task_name as taskName,
TO_CHAR(r.start_time, 'YYYY-MM-DD') as dateTime,
sum(n.sync_num) as syncNum
FROM
stas_task_config ta
JOIN stas_sync_record r ON ta.id = r.task_id
LEFT JOIN stas_sync_num n ON r.id = n.record_id
<where>
<if test="startTime != null">
AND r.start_time &gt;= #{startTime}
</if>
</where>
GROUP BY ta.id, ta.task_name, TO_CHAR(r.start_time, 'YYYY-MM-DD')
ORDER BY TO_CHAR(r.start_time, 'YYYY-MM-DD'), ta.task_name
</select>
<select id="taskStatsMonth" parameterType="java.lang.String" resultType="org.jeecg.modules.base.vo.TaskStatsVO">
SELECT
ta.id as id,
ta.task_name as taskName,
TO_CHAR(r.start_time, 'YYYY-MM') as dateTime, -- 改为按月统计
sum(n.sync_num) as syncNum
FROM
stas_task_config ta
JOIN stas_sync_record r ON ta.id = r.task_id
LEFT JOIN stas_sync_num n ON r.id = n.record_id
<where>
<if test="startTime != null">
AND r.start_time &gt;= #{startTime}
</if>
</where>
GROUP BY ta.id, ta.task_name, TO_CHAR(r.start_time, 'YYYY-MM')
ORDER BY TO_CHAR(r.start_time, 'YYYY-MM') DESC, ta.task_name
</select>
</mapper>

View File

@ -0,0 +1,11 @@
package org.jeecg.modules.base.vo;
import lombok.Data;
@Data
public class TaskStatsVO {
private String id;
private String taskName;
private String dateTime;
private Long syncNum;
}

View File

@ -48,8 +48,7 @@ public class OceanFeignController {
Result<Page<AlarmRecord>> pageResult = objectMapper.readValue(getResult, new TypeReference<>() {});
// 检查响应是否成功
if (pageResult.getCode() == 200) { // 假设 200 表示成功根据实际 API 文档调整
IPage<AlarmRecord> alarmRecordList = pageResult.getResult();
return Result.OK(pageResult);
return pageResult;
} else {
return Result.error("API 请求失败, 错误码: " + pageResult.getCode() + ", 消息: " + pageResult.getMessage());
}

View File

@ -38,14 +38,14 @@ public class StasSyncNumController extends JeecgController<StasSyncNum, IStasSyn
private IStasSyncNumService stasSyncNumService;
/**
* 分页列表查询
* 任务按表饼图统计
*
* @param stasSyncNum
* @param req
* @return
*/
//@AutoLog(value = "同步数量-分页列表查询")
@Operation(summary = "同步数量-分页列表查询")
@Operation(summary = "同步数量-任务按表饼图统计")
@GetMapping(value = "/list")
public Result<List<PieChartVO>> queryPageList(StasSyncNum stasSyncNum,
HttpServletRequest req) {

View File

@ -110,4 +110,35 @@ public class StasSyncRecordController extends JeecgController<StasSyncRecord, IS
return Result.OK(resultPage);
}
/**
* 历史同步数量统计
* @return
*/
@Operation(summary = "同步记录表-任务历史同步数量统计")
@GetMapping(value = "/taskHisSta")
public Result<?> taskHisSta() {
return Result.OK(stasSyncRecordService.taskHisStats());
}
/**
* 按日统计最近一个月同步数量
* @return
*/
@Operation(summary = "同步记录表-按日统计最近一个月同步数量")
@GetMapping(value = "/taskStatsDay")
public Result<?> taskStatsDay() {
return Result.OK(stasSyncRecordService.taskStatsDay());
}
/**
* 按月统计最近一年同步数量
* @return
*/
@Operation(summary = "同步记录表-按月统计最近一年同步数量")
@GetMapping(value = "/taskStatsMonth")
public Result<?> taskStatsMonth() {
return Result.OK(stasSyncRecordService.taskStatsMonth());
}
}

View File

@ -2,6 +2,10 @@ package org.jeecg.syncRecord.service;
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.util.List;
/**
* @Description: 同步记录表
@ -11,4 +15,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IStasSyncRecordService extends IService<StasSyncRecord> {
List<TaskHisStatsVO> taskHisStats();
TaskStatsResultVO taskStatsDay();
TaskStatsResultVO taskStatsMonth();
}

View File

@ -1,12 +1,22 @@
package org.jeecg.syncRecord.service.impl;
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;
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.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description: 同步记录表
* @Author: jeecg-boot
@ -14,6 +24,108 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
* @Version: V1.0
*/
@Service
@RequiredArgsConstructor
public class StasSyncRecordServiceImpl extends ServiceImpl<StasSyncRecordMapper, StasSyncRecord> implements IStasSyncRecordService {
@Override
public List<TaskHisStatsVO> taskHisStats() {
List<TaskStatsVO> taskStatsVOS = this.baseMapper.taskHistoryStats();
Map<String, TaskHisStatsVO> resultMap = new HashMap<>();
for (TaskStatsVO vo : taskStatsVOS) {
String id = vo.getId();
TaskHisStatsVO hisStatsVO = resultMap.get(id);
if (hisStatsVO == null) {
hisStatsVO = new TaskHisStatsVO();
hisStatsVO.setTaskName(vo.getTaskName());
hisStatsVO.setSyncNum(vo.getSyncNum());
resultMap.put(id, hisStatsVO);
} else {
hisStatsVO.setSyncNum(hisStatsVO.getSyncNum() + vo.getSyncNum());
}
}
return new ArrayList<>(resultMap.values());
}
@Override
public TaskStatsResultVO taskStatsDay() {
TaskStatsResultVO taskStatsResultVO = new TaskStatsResultVO();
taskStatsResultVO.setDateTimes(getLastMonthDates());
LocalDate today = LocalDate.now();
LocalDate monthDate = today.minusMonths(1);
String oneMonthAgo = monthDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
List<TaskStatsVO> taskStatsVOS = this.baseMapper.taskStatsDay(oneMonthAgo);
Map<String, List<TaskStatsVO>> groupedByTaskName = taskStatsVOS.stream()
.collect(Collectors.groupingBy(TaskStatsVO::getTaskName));
List<TaskStatsResultVO.TaskStatsInfo> taskStatsInfos = new ArrayList<>();
for (String taskName : groupedByTaskName.keySet()) {
TaskStatsResultVO.TaskStatsInfo taskStatsInfo = new TaskStatsResultVO.TaskStatsInfo();
taskStatsInfo.setTaskName(taskName);
taskStatsInfo.setTaskStats(groupedByTaskName.get(taskName));
taskStatsInfos.add(taskStatsInfo);
}
taskStatsResultVO.setTaskStatsInfos(taskStatsInfos);
return taskStatsResultVO;
}
@Override
public TaskStatsResultVO taskStatsMonth() {
TaskStatsResultVO taskStatsResultVO = new TaskStatsResultVO();
taskStatsResultVO.setDateTimes(getLastYearMonthDates());
LocalDate today = LocalDate.now();
LocalDate monthDate = today.minusMonths(11);;
String oneMonthAgo = monthDate.format(DateTimeFormatter.ofPattern("yyyy-MM-01"));
List<TaskStatsVO> taskStatsVOS = this.baseMapper.taskStatsMonth(oneMonthAgo);
Map<String, List<TaskStatsVO>> groupedByTaskName = taskStatsVOS.stream()
.collect(Collectors.groupingBy(TaskStatsVO::getTaskName));
List<TaskStatsResultVO.TaskStatsInfo> taskStatsInfos = new ArrayList<>();
for (String taskName : groupedByTaskName.keySet()) {
TaskStatsResultVO.TaskStatsInfo taskStatsInfo = new TaskStatsResultVO.TaskStatsInfo();
taskStatsInfo.setTaskName(taskName);
taskStatsInfo.setTaskStats(groupedByTaskName.get(taskName));
taskStatsInfos.add(taskStatsInfo);
}
taskStatsResultVO.setTaskStatsInfos(taskStatsInfos);
return taskStatsResultVO;
}
public static List<String> getLastMonthDates() {
List<String> dateList = new ArrayList<>();
LocalDate today = LocalDate.now();
LocalDate oneMonthAgo = today.minusMonths(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 从一个月前到今天包含开始和结束日期
LocalDate currentDate = oneMonthAgo;
while (!currentDate.isAfter(today)) {
dateList.add(currentDate.format(formatter));
currentDate = currentDate.plusDays(1);
}
return dateList;
}
public static List<String> getLastYearMonthDates() {
List<String> monthList = new ArrayList<>();
LocalDate today = LocalDate.now();
// 包含当月所以从11个月前开始
for (int i = 11; i >= 0; i--) {
LocalDate monthDate = today.minusMonths(i);
String monthStr = monthDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
monthList.add(monthStr);
}
return monthList;
}
}

View File

@ -0,0 +1,9 @@
package org.jeecg.syncRecord.vo;
import lombok.Data;
@Data
public class TaskHisStatsVO {
private String taskName;
private Long syncNum;
}

View File

@ -0,0 +1,19 @@
package org.jeecg.syncRecord.vo;
import lombok.Data;
import org.jeecg.modules.base.vo.TaskStatsVO;
import java.util.List;
@Data
public class TaskStatsResultVO {
List<String> dateTimes;
List<TaskStatsInfo> taskStatsInfos;
@Data
public static class TaskStatsInfo{
String taskName;
List<TaskStatsVO> taskStats;
}
}