Преглед на файлове

监控调阅 : 1. 监控调阅详情 : 新增- 返回当前调阅任务的多段调阅次数的时间 2. 监控调阅导出 : 新增- 返回每个调阅任务的多段调阅次数的时间,调阅时长

IO_linweisheng_s преди 1 седмица
родител
ревизия
5ad5340867

+ 38 - 18
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/vo/CoreMonitoringRetrievalTaskExcelVo.java

@@ -3,13 +3,15 @@ package com.xunmei.common.core.domain.retrieval.vo;
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-
+import com.alibaba.excel.enums.*;
 import java.util.Date;
 import java.util.List;
 
@@ -109,29 +111,47 @@ public class CoreMonitoringRetrievalTaskExcelVo {
     @ColumnWidth(20)
     private String retrievalUserName;
 
-    /**
-     * 调阅开始时间
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    @ExcelProperty("调阅开始时间")
-    @ColumnWidth(20)
-    private Date startTime;
-
-    /**
-     * 调阅结束时间
-     */
-
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    @ExcelProperty("调阅结束时间")
-    @ColumnWidth(20)
-    private Date endTime;
-
 
     @ExcelProperty("异常数量")
     @ColumnWidth(20)
     private Integer exceptionCount;
 
 
+//    /**
+//     * 调阅开始时间
+//     */
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+//    @ExcelProperty("调阅开始时间")
+//    @ColumnWidth(20)
+//    private Date startTime;
+//
+//    /**
+//     * 调阅结束时间
+//     */
+//
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+//    @ExcelProperty("调阅结束时间")
+//    @ColumnWidth(20)
+//    private Date endTime;
+
+
+    // 用于Excel导出的时间字段
+    @ExcelProperty("调阅开始时间-结束时间")
+    @ContentStyle(wrapped = true)
+    @ColumnWidth(40)
+    private String monitorTimes;
+
+    @ExcelProperty("调阅时长")
+    @ColumnWidth(20)
+    private String duration;
+
+    /**
+     * 任务id
+     */
+    @ExcelIgnore
+    @ApiModelProperty(value = "任务id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
 
 
 

+ 4 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/vo/CoreMonitoringRetrievalTaskOneVo.java

@@ -82,6 +82,10 @@ public class CoreMonitoringRetrievalTaskOneVo {
 
     List<TaskDataVo> taskDataVoList;
 
+    /**
+     * 调阅开始时间-结束时间
+     */
+    private List <String> timeList;
 
 
 }

+ 92 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.nacos.common.utils.CollectionUtils;
+import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.C;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -27,8 +28,10 @@ import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.vo.IdNameVo;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.core.access.domain.CoreMonitoringTaskRegistration;
 import com.xunmei.core.access.domain.TMonitoringRetrievalPlan;
 import com.xunmei.core.access.dto.CoreMonitoringTaskRegistrationDTO;
+import com.xunmei.core.access.mapper.CoreMonitoringTaskRegistrationMapper;
 import com.xunmei.core.access.mapper.TMonitoringRetrievalPlanMapper;
 import com.xunmei.core.access.service.ITMonitoringRetrievalPlanService;
 import com.xunmei.core.retrieval.mapper.CoreMonitoringRetrievalTaskMapper;
@@ -61,6 +64,7 @@ import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 
 /**
@@ -91,6 +95,9 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
     ICoreMonitoringRetrievalTaskBuilderService coreMonitoringRetrievalTskBuilderService;
     @Autowired
     TMonitoringRetrievalPlanMapper tMonitoringRetrievalPlanMapper;
+
+    @Autowired
+    CoreMonitoringTaskRegistrationMapper coreMonitoringTaskRegistrationMapper;
     private static final Integer ZERO = 0;
     private static final String PARENT_ID = "parent_id";
 
@@ -125,6 +132,41 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
             request.setOrgId(null);
         }
         List<CoreMonitoringRetrievalTaskExcelVo> list = coreMonitoringRetrievalTaskMapper.selectAllList(request);
+        List<Long> taskIdList = list.stream().map(CoreMonitoringRetrievalTaskExcelVo::getId).collect(Collectors.toList());
+        LambdaQueryWrapper<CoreMonitoringTaskRegistration> lqw = new LambdaQueryWrapper<>();
+        lqw.in(CoreMonitoringTaskRegistration::getTaskId, taskIdList);
+        List<CoreMonitoringTaskRegistration> registers = coreMonitoringTaskRegistrationMapper.selectList(lqw);
+
+
+        //根据ID进行分组然后进行处理。
+        // 根据任务ID进行分组
+        Map<Long, String> taskTimeMap = registers.stream().collect(Collectors.groupingBy(CoreMonitoringTaskRegistration::getTaskId))
+                //每个相同taskId进行以下操作
+                .entrySet().stream().collect(Collectors.toMap(
+                        Map.Entry::getKey,
+                entry -> {
+                            List<String> timeList = entry.getValue().stream()
+                                    .map(item -> dealTime(item.getTaskStartTime(),item.getTaskEndTime())).collect(Collectors.toList());
+                            return String.join("\n",timeList);
+                }
+                ));
+        list.forEach(item -> {
+            item.setMonitorTimes(taskTimeMap.getOrDefault(item.getId(),null));
+        });
+
+
+        //计算平均时长
+        Map<Long, String> durationResultMap = registers.stream().filter(item -> ObjectUtil.isNotNull(item.getAverageDuration()))
+                .collect(Collectors.groupingBy(CoreMonitoringTaskRegistration::getTaskId,
+                        Collectors.collectingAndThen(
+                                Collectors.summingLong(item -> item.getAverageDuration().longValue()),
+                                totalMS -> totalTime(totalMS)
+                        )));
+
+        list.forEach(item -> {
+            item.setDuration(durationResultMap.getOrDefault(item.getId(),null));
+        });
+
 
         if (ObjectUtil.isEmpty(list)) {
             throw new RuntimeException("导出数据为空!");
@@ -146,6 +188,40 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
         EasyExcel.write(response.getOutputStream(), CoreMonitoringRetrievalTaskExcelVo.class).sheet("Sheet1").doWrite(list);
 
     }
+    private String totalTime(long milliseconds) {
+        long totalSeconds = milliseconds / 1000;
+        long totalMinutes = totalSeconds / 60;
+        long totalHours = totalMinutes / 60;
+
+        // 计算剩余的分钟数和秒数
+        long remainingMinutes = totalMinutes % 60;
+        long remainingSeconds = totalSeconds % 60;
+        if (totalHours == 0) {
+            if (totalMinutes == 0) {
+                return String.format("%02d秒", remainingSeconds);
+            }
+            return String.format("%02d分钟%02d秒", remainingMinutes, remainingSeconds);
+        } else {
+
+            return String.format("%02d小时%02d分钟%02d秒", totalHours, remainingMinutes, remainingSeconds);
+        }
+
+    }
+    private String dealTime(Date start, Date end) {
+        final SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(end);
+        String m = String.valueOf(calendar.get(Calendar.MINUTE));
+        if (m.length() == 1) {
+            m = "0" + calendar.get(Calendar.MINUTE);
+        }
+        String h = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY));
+        if (h.length() == 1) {
+            h = "0" + calendar.get(Calendar.HOUR_OF_DAY);
+        }
+        String dateStr = format.format(start) + "-" + h + "时" + m + "分";
+        return dateStr;
+    }
 
     public static String getLastDay(int year, int month, String format) {
         Calendar calendar = Calendar.getInstance();
@@ -257,6 +333,20 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
         CoreMonitoringRetrievalTaskOneVo retrievalTaskOneVo = coreMonitoringRetrievalTaskMapper.selectOneById(id);
         List<TaskDataVo> taskDataVoList = coreMonitoringRetrievalTaskMapper.selectTaskDataVoListByRetrievalTaskId(id);
         retrievalTaskOneVo.setTaskDataVoList(taskDataVoList);
+
+
+
+        LambdaQueryWrapper<CoreMonitoringTaskRegistration> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(CoreMonitoringTaskRegistration::getTaskId, id);
+        List<CoreMonitoringTaskRegistration> registrations = coreMonitoringTaskRegistrationMapper.selectList(lqw);
+
+        // 调阅开始时间-结束时间
+        List<String> times = registrations.stream().map(item -> {
+            final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+            return format.format(item.getTaskStartTime()) + "-" + format.format(item.getTaskEndTime());
+        }).collect(Collectors.toList());
+
+        retrievalTaskOneVo.setTimeList(times);
         return retrievalTaskOneVo;
     }
 
@@ -459,4 +549,6 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
         List<CoreMonitoringRetrievalTask> taskList = baseMapper.selectList(wrapper);
         return taskList.stream().map(CoreMonitoringRetrievalTask::getId).map(String::valueOf).collect(Collectors.toList());
     }
+
+
 }

+ 2 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/reportForms/MonitorAccessReportMapper.xml

@@ -69,7 +69,8 @@
     </select>
     <select id="avg" resultType="java.lang.String">
         SELECT
-        IFNULL( ROUND( (SUM( a.average_duration )/1000 / 3600)/ COUNT( a.id ), 2 ), 0 )
+            -- 计算公式 : 平均调阅时长 = 所有任务的多条调阅记录的耗时的总和 / 任务数 而非 / 任务的调阅记录数
+        IFNULL( ROUND( (SUM( a.average_duration )/1000 / 3600)/ COUNT( b.id ), 2 ), 0 )
         FROM
         core_monitoring_task_registration a
         LEFT JOIN core_monitoring_retrieval_task b ON a.task_id = b.id