Browse Source

feat: 新增缺陷数量统计,用于汇聚系统收集每站的缺陷数量

yanyuan
yinhuaiwei 1 month ago
parent
commit
8f3039ef09
8 changed files with 133 additions and 16 deletions
  1. +5
    -4
      inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/DefectLevel.java
  2. +52
    -6
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java
  3. +2
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysis.java
  4. +3
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/mapper/ResultAnalysisMapper.java
  5. +2
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/IResultAnalysisService.java
  6. +6
    -4
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/impl/ResultAnalysisServiceImpl.java
  7. +2
    -2
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java
  8. +61
    -0
      inspect-main/inspect-main-task/src/main/resources/mapper/task/ResultAnalysisMapper.xml

+ 5
- 4
inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/DefectLevel.java View File

@ -4,11 +4,12 @@ import lombok.Getter;
@Getter @Getter
public enum DefectLevel { public enum DefectLevel {
// 0=无, 1=紧急, 2=严重, 3=一般
// 0=无, 1=紧急, 2=严重, 3=一般, 4=轻微
NONE(0, "无"), NONE(0, "无"),
URGENT(1, ""),
SERIOUS(2, ""),
NORMAL(3, "");
URGENT(1, "重大"),
SERIOUS(2, "严重"),
NORMAL(3, "一般"),
MINOR(4, "轻微");
private final Integer code; private final Integer code;
private final String info; private final String info;


+ 52
- 6
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java View File

@ -10,6 +10,7 @@ import com.inspect.analysis.service.DefectListAggregator;
import com.inspect.api.service.AlarmPublisher; import com.inspect.api.service.AlarmPublisher;
import com.inspect.base.core.constant.AlgConstants; import com.inspect.base.core.constant.AlgConstants;
import com.inspect.base.core.domain.Response; import com.inspect.base.core.domain.Response;
import com.inspect.base.core.enums.DefectLevel;
import com.inspect.base.core.enums.PointStatusEnum; import com.inspect.base.core.enums.PointStatusEnum;
import com.inspect.base.core.utils.StringUtils; import com.inspect.base.core.utils.StringUtils;
import com.inspect.base.core.utils.poi.ExcelUtil; import com.inspect.base.core.utils.poi.ExcelUtil;
@ -33,18 +34,16 @@ import com.inspect.task.service.IPatrolTaskService;
import com.inspect.taskinfo.domain.PatrolTaskInfo; import com.inspect.taskinfo.domain.PatrolTaskInfo;
import com.inspect.taskinfo.service.IPatrolTaskInfoService; import com.inspect.taskinfo.service.IPatrolTaskInfoService;
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.inspect.taskstatus.domain.PatrolTaskStatus; import com.inspect.taskstatus.domain.PatrolTaskStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@RestController @RestController
@RequestMapping({"/analysis"}) @RequestMapping({"/analysis"})
@ -300,6 +299,53 @@ public class ResultAnalysisController extends BaseController {
return this.getDataTable(patrolResultList); return this.getDataTable(patrolResultList);
} }
/**
* 汇聚专用:按时间范围分页查询 result_analysis 原始结果。
*/
@GetMapping({"/agg/list"})
public TableDataInfo aggList(@RequestParam(required = false) String beginTime,
@RequestParam(required = false) String endTime,
@RequestParam(required = false) String taskPatrolId) {
this.startPage();
ResultAnalysis query = new ResultAnalysis();
query.setBeginTime(beginTime);
query.setEndTime(endTime);
query.setTaskPatrolId(taskPatrolId);
List<ResultAnalysis> list = this.resultAnalysisService.selectResultAnalysisList(query);
for (ResultAnalysis item : list) {
item.setDefectLevel(resolveDefectLevel(item.getResultType()));
}
return this.getDataTable(list);
}
/** 汇聚专用:按月份聚合 defect 统计结果。 */
@GetMapping({"/agg/defect/month"})
public AjaxResult aggDefectMonth(@RequestParam String beginMonth, @RequestParam String endMonth) {
if (StringUtils.isEmpty(beginMonth) || StringUtils.isEmpty(endMonth)) {
return AjaxResult.error("beginMonth / endMonth 不能为空");
}
try {
DateTimeFormatter month = DateTimeFormatter.ofPattern("yyyy-MM");
DateTimeFormatter datetime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDate begin = YearMonth.parse(beginMonth, month).atDay(1);
LocalDate end = YearMonth.parse(endMonth, month).plusMonths(1).atDay(1);
List<Map<String, Object>> list = resultAnalysisService.selectAggDefectMonthStat(
begin.atStartOfDay().format(datetime), end.atStartOfDay().format(datetime));
return AjaxResult.success(list);
} catch (Exception e) {
return AjaxResult.error("月度缺陷统计失败: " + e.getMessage());
}
}
private static Integer resolveDefectLevel(String resultType) {
if ("0".equals(resultType)) {
return DefectLevel.NORMAL.getCode();
}
if ("2".equals(resultType)) {
return DefectLevel.MINOR.getCode();
}
return DefectLevel.NONE.getCode();
}
@Log( @Log(
title = "分析结果", title = "分析结果",
businessType = BizType.EXPORT businessType = BizType.EXPORT


+ 2
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysis.java View File

@ -46,6 +46,8 @@ public class ResultAnalysis extends BaseEntity {
private String algType; private String algType;
private String filter; private String filter;
private String taskPatrolId; private String taskPatrolId;
/** 当前由 resultType/warnStatus 推导,后续可改为表字段 */
private Integer defectLevel;
private String resCode; private String resCode;
private String resImgUrl; private String resImgUrl;
private String resConf; private String resConf;


+ 3
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/mapper/ResultAnalysisMapper.java View File

@ -82,4 +82,7 @@ public interface ResultAnalysisMapper {
void updateResultAnalysisByCondition(ResultAnalysis analysis); void updateResultAnalysisByCondition(ResultAnalysis analysis);
List<ResultAnalysisSummaryDTO> countResultAnalysisSummary(@Param("list") List<String> taskPatrolIds); List<ResultAnalysisSummaryDTO> countResultAnalysisSummary(@Param("list") List<String> taskPatrolIds);
List<Map<String, Object>> selectAggDefectMonthStat(@Param("beginTime") String beginTime,
@Param("endTime") String endTime);
} }

+ 2
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/IResultAnalysisService.java View File

@ -62,4 +62,6 @@ public interface IResultAnalysisService {
void updateResultAnalysisByCondition(ResultAnalysis analysis); void updateResultAnalysisByCondition(ResultAnalysis analysis);
List<ResultAnalysisSummaryDTO> countResultAnalysisSummary(List<String> taskPatrolIds); List<ResultAnalysisSummaryDTO> countResultAnalysisSummary(List<String> taskPatrolIds);
List<Map<String, Object>> selectAggDefectMonthStat(String format, String format1);
} }

+ 6
- 4
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/impl/ResultAnalysisServiceImpl.java View File

@ -12,10 +12,7 @@ import com.inspect.task.domain.PatrolData;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -110,6 +107,11 @@ public class ResultAnalysisServiceImpl implements IResultAnalysisService {
return resultAnalysisMapper.countResultAnalysisSummary(taskPatrolledIds); return resultAnalysisMapper.countResultAnalysisSummary(taskPatrolledIds);
} }
@Override
public List<Map<String, Object>> selectAggDefectMonthStat(String beginTime, String endTime) {
return this.resultAnalysisMapper.selectAggDefectMonthStat(beginTime, endTime);
}
public int deleteResultAnalysisByLineIds(Long[] lineIds) { public int deleteResultAnalysisByLineIds(Long[] lineIds) {
return this.resultAnalysisMapper.deleteResultAnalysisByLineIds(lineIds); return this.resultAnalysisMapper.deleteResultAnalysisByLineIds(lineIds);
} }


+ 2
- 2
inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java View File

@ -105,9 +105,9 @@ public class PatrolData implements Comparable<PatrolData> {
public void setWarnStatus(String warnStatus) { public void setWarnStatus(String warnStatus) {
this.warnStatus = warnStatus; this.warnStatus = warnStatus;
if ("0".equals(warnStatus)) { if ("0".equals(warnStatus)) {
this.defectLevel = DefectLevel.SERIOUS.getCode();
} else if ("2".equals(warnStatus)) {
this.defectLevel = DefectLevel.NORMAL.getCode(); this.defectLevel = DefectLevel.NORMAL.getCode();
} else if ("2".equals(warnStatus)) {
this.defectLevel = DefectLevel.MINOR.getCode();
} else { } else {
this.defectLevel = DefectLevel.NONE.getCode(); this.defectLevel = DefectLevel.NONE.getCode();
} }


+ 61
- 0
inspect-main/inspect-main-task/src/main/resources/mapper/task/ResultAnalysisMapper.xml View File

@ -757,5 +757,66 @@
<if test="type != null and type != '' and type == 0">and b.result_type = '0' </if> <if test="type != null and type != '' and type == 0">and b.result_type = '0' </if>
</where> </where>
</select> </select>
<select id="selectAggDefectMonthStat" resultType="java.util.LinkedHashMap">
WITH latest AS (
SELECT x.task_patrol_id, x.objectId, x.alg_type, x.result_type, x.create_time
FROM (
SELECT ra.task_patrol_id,
ra.objectId,
ra.alg_type,
ra.result_type,
ra.create_time,
ROW_NUMBER() OVER (
PARTITION BY ra.task_patrol_id, ra.objectId, ra.alg_type
ORDER BY ra.create_time DESC, ra.line_id DESC
) AS rn
FROM result_analysis ra
WHERE ra.filter = '0'
AND ra.create_time &gt;= #{beginTime}
AND ra.create_time &lt; #{endTime}
) x
WHERE x.rn = 1
),
classified AS (
SELECT l.create_time, l.result_type, task_info.point_type
FROM latest l
INNER JOIN (
SELECT pts.task_patrolled_id,
MAX(COALESCE(pt.point_type, '')) AS point_type
FROM patrol_task_status pts
INNER JOIN patrol_task pt
ON pt.task_code = pts.task_code
WHERE pts.task_type &lt;&gt; '2'
AND pts.main_id IS NULL
GROUP BY pts.task_patrolled_id
) task_info
ON task_info.task_patrolled_id = l.task_patrol_id
INNER JOIN basedata_patrolpoint p
ON p.patrol_point_id = CAST(l.objectId AS UNSIGNED)
),
month_rows AS (
SELECT create_time, result_type, '' AS point_type
FROM classified
UNION ALL
SELECT c.create_time, c.result_type, category.point_type
FROM classified c
INNER JOIN (
SELECT '880' AS point_type
UNION ALL SELECT '881'
UNION ALL SELECT '882'
) category
ON FIND_IN_SET(category.point_type, c.point_type)
)
SELECT DATE_FORMAT(create_time, '%Y-%m') AS statMonth,
point_type AS pointType,
SUM(CASE WHEN result_type = '2' THEN 1 ELSE 0 END) AS minorCount,
SUM(CASE WHEN result_type = '0' THEN 1 ELSE 0 END) AS generalCount,
0 AS seriousCount,
0 AS urgentCount,
SUM(CASE WHEN result_type = '1' THEN 1 ELSE 0 END) AS normalCount
FROM month_rows
GROUP BY DATE_FORMAT(create_time, '%Y-%m'), point_type
ORDER BY statMonth, pointType
</select>
</mapper> </mapper>

Loading…
Cancel
Save